From 070cd4d5a5db70622b780b953a1c773c2d5602d3 Mon Sep 17 00:00:00 2001 From: Developer Date: Fri, 12 Jun 2026 13:46:23 +0000 Subject: [PATCH] chore: track all project map and index files Add generated .pi-map.md and .pi-map.index.md files across the repository so the project navigation maps are shared and versioned. These artifacts are maintained by project_map_init/patch/validate and must be kept in sync with source edits. Note: .cache/ remains ignored (added in previous commit). --- .claude/.pi-map.index.md | 20 +++ .claude/.pi-map.md | 18 +++ .claude/skills/.pi-map.index.md | 20 +++ .claude/skills/.pi-map.md | 18 +++ .claude/skills/sift-backlog/.pi-map.index.md | 19 +++ .claude/skills/sift-backlog/.pi-map.md | 19 +++ .opencode/.pi-map.index.md | 23 +++ .opencode/.pi-map.md | 18 +++ .opencode/commands/.pi-map.index.md | 22 +++ .opencode/commands/.pi-map.md | 22 +++ .opencode/skills/.pi-map.index.md | 29 ++++ .opencode/skills/.pi-map.md | 18 +++ .../openspec-apply-change/.pi-map.index.md | 19 +++ .../skills/openspec-apply-change/.pi-map.md | 19 +++ .../openspec-archive-change/.pi-map.index.md | 19 +++ .../skills/openspec-archive-change/.pi-map.md | 19 +++ .../skills/openspec-explore/.pi-map.index.md | 19 +++ .opencode/skills/openspec-explore/.pi-map.md | 19 +++ .../skills/openspec-propose/.pi-map.index.md | 19 +++ .opencode/skills/openspec-propose/.pi-map.md | 19 +++ .pi-map.index.md | 79 ++++++++++ .pi-map.md | 42 +++++ .stoneforge/.pi-map.index.md | 23 +++ .stoneforge/.pi-map.md | 21 +++ .stoneforge/sync/.pi-map.index.md | 20 +++ .stoneforge/sync/.pi-map.md | 20 +++ apps/.pi-map.index.md | 23 +++ apps/.pi-map.md | 18 +++ apps/api/.pi-map.index.md | 39 +++++ apps/api/.pi-map.md | 25 +++ apps/api/alembic/.pi-map.index.md | 25 +++ apps/api/alembic/.pi-map.md | 23 +++ apps/api/alembic/versions/.pi-map.index.md | 67 ++++++++ apps/api/alembic/versions/.pi-map.md | 74 +++++++++ apps/api/src/.pi-map.index.md | 51 ++++++ apps/api/src/.pi-map.md | 35 ++++ apps/api/src/api/.pi-map.index.md | 40 +++++ apps/api/src/api/.pi-map.md | 30 ++++ apps/api/src/api/config/.pi-map.index.md | 24 +++ apps/api/src/api/config/.pi-map.md | 31 ++++ apps/api/src/api/project/.pi-map.index.md | 22 +++ apps/api/src/api/project/.pi-map.md | 29 ++++ apps/api/src/api/system/.pi-map.index.md | 26 +++ apps/api/src/api/system/.pi-map.md | 33 ++++ apps/api/src/api/tool/.pi-map.index.md | 25 +++ apps/api/src/api/tool/.pi-map.md | 32 ++++ apps/api/src/api/user/.pi-map.index.md | 23 +++ apps/api/src/api/user/.pi-map.md | 30 ++++ apps/api/src/api/workspace/.pi-map.index.md | 24 +++ apps/api/src/api/workspace/.pi-map.md | 31 ++++ apps/api/src/auth/.pi-map.index.md | 24 +++ apps/api/src/auth/.pi-map.md | 31 ++++ apps/api/src/models/.pi-map.index.md | 37 +++++ apps/api/src/models/.pi-map.md | 25 +++ apps/api/src/models/config/.pi-map.index.md | 23 +++ apps/api/src/models/config/.pi-map.md | 24 +++ apps/api/src/models/project/.pi-map.index.md | 23 +++ apps/api/src/models/project/.pi-map.md | 25 +++ apps/api/src/models/system/.pi-map.index.md | 24 +++ apps/api/src/models/system/.pi-map.md | 27 ++++ apps/api/src/models/tool/.pi-map.index.md | 23 +++ apps/api/src/models/tool/.pi-map.md | 25 +++ apps/api/src/models/user/.pi-map.index.md | 25 +++ apps/api/src/models/user/.pi-map.md | 27 ++++ apps/api/src/schemas/.pi-map.index.md | 36 +++++ apps/api/src/schemas/.pi-map.md | 22 +++ apps/api/src/schemas/config/.pi-map.index.md | 23 +++ apps/api/src/schemas/config/.pi-map.md | 30 ++++ apps/api/src/schemas/project/.pi-map.index.md | 23 +++ apps/api/src/schemas/project/.pi-map.md | 30 ++++ apps/api/src/schemas/system/.pi-map.index.md | 21 +++ apps/api/src/schemas/system/.pi-map.md | 25 +++ apps/api/src/schemas/tool/.pi-map.index.md | 22 +++ apps/api/src/schemas/tool/.pi-map.md | 27 ++++ apps/api/src/schemas/user/.pi-map.index.md | 24 +++ apps/api/src/schemas/user/.pi-map.md | 27 ++++ apps/api/src/scripts/.pi-map.index.md | 21 +++ apps/api/src/scripts/.pi-map.md | 28 ++++ apps/api/src/seeds/.pi-map.index.md | 21 +++ apps/api/src/seeds/.pi-map.md | 28 ++++ apps/api/src/services/.pi-map.index.md | 42 +++++ apps/api/src/services/.pi-map.md | 22 +++ apps/api/src/services/config/.pi-map.index.md | 25 +++ apps/api/src/services/config/.pi-map.md | 32 ++++ apps/api/src/services/docker/.pi-map.index.md | 26 +++ apps/api/src/services/docker/.pi-map.md | 33 ++++ apps/api/src/services/git/.pi-map.index.md | 24 +++ apps/api/src/services/git/.pi-map.md | 31 ++++ .../src/services/instance/.pi-map.index.md | 23 +++ apps/api/src/services/instance/.pi-map.md | 30 ++++ apps/api/src/services/shared/.pi-map.index.md | 28 ++++ apps/api/src/services/shared/.pi-map.md | 35 ++++ .../src/services/terminal/.pi-map.index.md | 22 +++ apps/api/src/services/terminal/.pi-map.md | 29 ++++ apps/api/src/services/tool/.pi-map.index.md | 20 +++ apps/api/src/services/tool/.pi-map.md | 27 ++++ apps/api/src/utils/.pi-map.index.md | 24 +++ apps/api/src/utils/.pi-map.md | 31 ++++ apps/api/tests/.pi-map.index.md | 36 +++++ apps/api/tests/.pi-map.md | 29 ++++ apps/api/tests/api/.pi-map.index.md | 20 +++ apps/api/tests/api/.pi-map.md | 27 ++++ apps/api/tests/integration/.pi-map.index.md | 37 +++++ apps/api/tests/integration/.pi-map.md | 44 ++++++ apps/api/tests/services/.pi-map.index.md | 20 +++ apps/api/tests/services/.pi-map.md | 27 ++++ apps/api/tests/system/.pi-map.index.md | 20 +++ apps/api/tests/system/.pi-map.md | 20 +++ apps/api/tests/unit/.pi-map.index.md | 47 ++++++ apps/api/tests/unit/.pi-map.md | 54 +++++++ apps/api/uploads/.pi-map.index.md | 20 +++ apps/api/uploads/.pi-map.md | 18 +++ apps/api/uploads/avatars/.pi-map.index.md | 22 +++ apps/api/uploads/avatars/.pi-map.md | 22 +++ apps/web/.pi-map.index.md | 40 +++++ apps/web/.pi-map.md | 32 ++++ apps/web/public/.pi-map.index.md | 19 +++ apps/web/public/.pi-map.md | 19 +++ apps/web/src/.pi-map.index.md | 50 ++++++ apps/web/src/.pi-map.md | 30 ++++ apps/web/src/api/.pi-map.index.md | 44 ++++++ apps/web/src/api/.pi-map.md | 51 ++++++ apps/web/src/components/.pi-map.index.md | 34 ++++ apps/web/src/components/.pi-map.md | 39 +++++ .../src/components/features/.pi-map.index.md | 53 +++++++ apps/web/src/components/features/.pi-map.md | 18 +++ .../features/config-profiles/.pi-map.index.md | 22 +++ .../features/config-profiles/.pi-map.md | 24 +++ .../components/features/git/.pi-map.index.md | 25 +++ .../src/components/features/git/.pi-map.md | 30 ++++ .../features/mobile/.pi-map.index.md | 28 ++++ .../src/components/features/mobile/.pi-map.md | 35 ++++ .../features/notification/.pi-map.index.md | 27 ++++ .../features/notification/.pi-map.md | 34 ++++ .../features/project/.pi-map.index.md | 26 +++ .../components/features/project/.pi-map.md | 29 ++++ .../features/session/.pi-map.index.md | 23 +++ .../components/features/session/.pi-map.md | 30 ++++ .../features/settings/.pi-map.index.md | 21 +++ .../components/features/settings/.pi-map.md | 22 +++ .../features/ssh-keys/.pi-map.index.md | 21 +++ .../components/features/ssh-keys/.pi-map.md | 22 +++ .../features/terminal/.pi-map.index.md | 28 ++++ .../components/features/terminal/.pi-map.md | 35 ++++ .../features/tool-workshop/.pi-map.index.md | 22 +++ .../features/tool-workshop/.pi-map.md | 26 +++ .../components/features/tool/.pi-map.index.md | 25 +++ .../src/components/features/tool/.pi-map.md | 32 ++++ .../features/workspace/.pi-map.index.md | 25 +++ .../components/features/workspace/.pi-map.md | 32 ++++ apps/web/src/hooks/.pi-map.index.md | 48 ++++++ apps/web/src/hooks/.pi-map.md | 55 +++++++ apps/web/src/pages/.pi-map.index.md | 39 +++++ apps/web/src/pages/.pi-map.md | 46 ++++++ apps/web/src/state/.pi-map.index.md | 25 +++ apps/web/src/state/.pi-map.md | 32 ++++ apps/web/src/styles/.pi-map.index.md | 24 +++ apps/web/src/styles/.pi-map.md | 22 +++ apps/web/src/styles/pages/.pi-map.index.md | 25 +++ apps/web/src/styles/pages/.pi-map.md | 25 +++ apps/web/src/test/.pi-map.index.md | 20 +++ apps/web/src/test/.pi-map.md | 20 +++ apps/web/src/types/.pi-map.index.md | 21 +++ apps/web/src/types/.pi-map.md | 25 +++ apps/web/src/utils/.pi-map.index.md | 23 +++ apps/web/src/utils/.pi-map.md | 30 ++++ docs/.pi-map.index.md | 42 +++++ docs/.pi-map.md | 19 +++ docs/api/.pi-map.index.md | 27 ++++ docs/api/.pi-map.md | 27 ++++ docs/architecture/.pi-map.index.md | 24 +++ docs/architecture/.pi-map.md | 22 +++ docs/architecture/decisions/.pi-map.index.md | 20 +++ docs/architecture/decisions/.pi-map.md | 20 +++ docs/deployment/.pi-map.index.md | 22 +++ docs/deployment/.pi-map.md | 22 +++ docs/development/.pi-map.index.md | 22 +++ docs/development/.pi-map.md | 22 +++ docs/features/.pi-map.index.md | 28 ++++ docs/features/.pi-map.md | 28 ++++ docs/guides/.pi-map.index.md | 19 +++ docs/guides/.pi-map.md | 19 +++ docs/superpowers/.pi-map.index.md | 23 +++ docs/superpowers/.pi-map.md | 18 +++ docs/superpowers/plans/.pi-map.index.md | 22 +++ docs/superpowers/plans/.pi-map.md | 22 +++ docs/superpowers/specs/.pi-map.index.md | 20 +++ docs/superpowers/specs/.pi-map.md | 20 +++ docs/templates/.pi-map.index.md | 21 +++ docs/templates/.pi-map.md | 21 +++ e2e/.pi-map.index.md | 27 ++++ e2e/.pi-map.md | 25 +++ e2e/tests/.pi-map.index.md | 20 +++ e2e/tests/.pi-map.md | 20 +++ openspec/.pi-map.index.md | 40 +++++ openspec/.pi-map.md | 20 +++ openspec/changes/.pi-map.index.md | 74 +++++++++ openspec/changes/.pi-map.md | 18 +++ openspec/changes/archive/.pi-map.index.md | 149 ++++++++++++++++++ openspec/changes/archive/.pi-map.md | 18 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 26 +++ .../specs/.pi-map.md | 18 +++ .../specs/auth-oauth/.pi-map.index.md | 19 +++ .../specs/auth-oauth/.pi-map.md | 19 +++ .../docker-infrastructure/.pi-map.index.md | 19 +++ .../specs/docker-infrastructure/.pi-map.md | 19 +++ .../specs/traefik-deployment/.pi-map.index.md | 19 +++ .../specs/traefik-deployment/.pi-map.md | 19 +++ .../2025-05-17-user-profile/.pi-map.index.md | 25 +++ .../2025-05-17-user-profile/.pi-map.md | 23 +++ .../specs/.pi-map.index.md | 20 +++ .../2025-05-17-user-profile/specs/.pi-map.md | 18 +++ .../specs/user-profile/.pi-map.index.md | 19 +++ .../specs/user-profile/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../2025-05-18-git-repo-management/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../git-repo-management/.pi-map.index.md | 19 +++ .../specs/git-repo-management/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../2025-05-18-ssh-key-management/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../specs/ssh-key-management/.pi-map.index.md | 19 +++ .../specs/ssh-key-management/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 26 +++ .../specs/.pi-map.md | 18 +++ .../specs/e2e-testing/.pi-map.index.md | 19 +++ .../specs/e2e-testing/.pi-map.md | 19 +++ .../specs/test-isolation/.pi-map.index.md | 19 +++ .../specs/test-isolation/.pi-map.md | 19 +++ .../specs/test-organization/.pi-map.index.md | 19 +++ .../specs/test-organization/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../tool-types-definition/.pi-map.index.md | 19 +++ .../specs/tool-types-definition/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../user-config-management/.pi-map.index.md | 19 +++ .../specs/user-config-management/.pi-map.md | 19 +++ .../2026-05-17-auth-oauth/.pi-map.index.md | 25 +++ .../archive/2026-05-17-auth-oauth/.pi-map.md | 23 +++ .../specs/.pi-map.index.md | 20 +++ .../2026-05-17-auth-oauth/specs/.pi-map.md | 18 +++ .../specs/auth-oauth/.pi-map.index.md | 19 +++ .../specs/auth-oauth/.pi-map.md | 19 +++ .../.pi-map.index.md | 23 +++ .../2026-05-17-database-models/.pi-map.md | 23 +++ .../.pi-map.index.md | 25 +++ .../2026-05-17-frontend-foundation/.pi-map.md | 23 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../frontend-foundation/.pi-map.index.md | 19 +++ .../specs/frontend-foundation/.pi-map.md | 19 +++ .../.pi-map.index.md | 25 +++ .../2026-05-17-project-management/.pi-map.md | 23 +++ .../specs/.pi-map.index.md | 26 +++ .../specs/.pi-map.md | 18 +++ .../specs/git-repo/.pi-map.index.md | 19 +++ .../specs/git-repo/.pi-map.md | 19 +++ .../specs/project-management/.pi-map.index.md | 19 +++ .../specs/project-management/.pi-map.md | 19 +++ .../specs/ssh-keys/.pi-map.index.md | 19 +++ .../specs/ssh-keys/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../database-initialization/.pi-map.index.md | 19 +++ .../specs/database-initialization/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.openspec/.pi-map.index.md | 19 +++ .../.openspec/.pi-map.md | 19 +++ .../.pi-map.index.md | 26 +++ .../2026-05-19-api-documentation/.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../2026-05-19-file-editor/.pi-map.index.md | 24 +++ .../archive/2026-05-19-file-editor/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../2026-05-19-file-editor/specs/.pi-map.md | 19 +++ .../2026-05-19-git-control/.pi-map.index.md | 24 +++ .../archive/2026-05-19-git-control/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../2026-05-19-git-control/specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../2026-05-19-repo-workspace/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.openspec/.pi-map.index.md | 19 +++ .../.openspec/.pi-map.md | 19 +++ .../.pi-map.index.md | 26 +++ .../.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.openspec/.pi-map.index.md | 19 +++ .../.openspec/.pi-map.md | 19 +++ .../.pi-map.index.md | 26 +++ .../2026-05-19-tool-instances/.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.openspec/.pi-map.index.md | 19 +++ .../.openspec/.pi-map.md | 19 +++ .../2026-05-19-tool-terminal/.pi-map.index.md | 26 +++ .../2026-05-19-tool-terminal/.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 19 +++ .../2026-05-19-tool-terminal/specs/.pi-map.md | 19 +++ .../.openspec/.pi-map.index.md | 19 +++ .../.openspec/.pi-map.md | 19 +++ .../.pi-map.index.md | 26 +++ .../.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 19 +++ .../specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../.pi-map.index.md | 19 +++ .../cloudflare-tunnel-management/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 29 ++++ .../specs/.pi-map.md | 18 +++ .../frontend-foundation/.pi-map.index.md | 19 +++ .../specs/frontend-foundation/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../tool-type-port-visibility/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../tool-type-single-interface/.pi-map.md | 19 +++ .../tool-types-definition/.pi-map.index.md | 19 +++ .../specs/tool-types-definition/.pi-map.md | 19 +++ .../.pi-map.index.md | 22 +++ .../.pi-map.md | 22 +++ .../.pi-map.index.md | 21 +++ .../.pi-map.md | 21 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 32 ++++ .../specs/.pi-map.md | 18 +++ .../instance-runtime-health/.pi-map.index.md | 19 +++ .../specs/instance-runtime-health/.pi-map.md | 19 +++ .../instance-startup-health/.pi-map.index.md | 19 +++ .../specs/instance-startup-health/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../readiness-probe-integration/.pi-map.md | 19 +++ .../smart-tunnel-recovery/.pi-map.index.md | 19 +++ .../specs/smart-tunnel-recovery/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ .../specs/tool-instances/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../2026-05-22-instance-proxy/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../specs/instance-proxy/.pi-map.index.md | 19 +++ .../specs/instance-proxy/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 26 +++ .../specs/.pi-map.md | 18 +++ .../opencode-web-server/.pi-map.index.md | 19 +++ .../specs/opencode-web-server/.pi-map.md | 19 +++ .../tool-port-configuration/.pi-map.index.md | 19 +++ .../specs/tool-port-configuration/.pi-map.md | 19 +++ .../specs/tool-types/.pi-map.index.md | 19 +++ .../specs/tool-types/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 26 +++ .../specs/.pi-map.md | 18 +++ .../specs/git-repo/.pi-map.index.md | 19 +++ .../specs/git-repo/.pi-map.md | 19 +++ .../specs/repo-clone-mode/.pi-map.index.md | 19 +++ .../specs/repo-clone-mode/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ .../specs/tool-instances/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 26 +++ .../specs/.pi-map.md | 18 +++ .../session-lifecycle-ux/.pi-map.index.md | 19 +++ .../specs/session-lifecycle-ux/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ .../specs/tool-instances/.pi-map.md | 19 +++ .../tunnel-health-monitoring/.pi-map.index.md | 19 +++ .../specs/tunnel-health-monitoring/.pi-map.md | 19 +++ .../.openspec/.pi-map.index.md | 19 +++ .../.openspec/.pi-map.md | 19 +++ .../2026-05-22-sessions-hub/.pi-map.index.md | 26 +++ .../2026-05-22-sessions-hub/.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 19 +++ .../2026-05-22-sessions-hub/specs/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../tool-config-management/.pi-map.index.md | 19 +++ .../specs/tool-config-management/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../tool-config-management/.pi-map.index.md | 19 +++ .../specs/tool-config-management/.pi-map.md | 19 +++ .../2026-05-22-tool-workshop/.pi-map.index.md | 23 +++ .../2026-05-22-tool-workshop/.pi-map.md | 21 +++ .../specs/.pi-map.index.md | 21 +++ .../2026-05-22-tool-workshop/specs/.pi-map.md | 21 +++ .../.pi-map.index.md | 22 +++ .../.pi-map.md | 22 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../specs/tool-types/.pi-map.index.md | 19 +++ .../specs/tool-types/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 29 ++++ .../specs/.pi-map.md | 18 +++ .../opencode-web-server/.pi-map.index.md | 19 +++ .../specs/opencode-web-server/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../tool-terminal-startup-command/.pi-map.md | 19 +++ .../specs/tool-terminal/.pi-map.index.md | 19 +++ .../specs/tool-terminal/.pi-map.md | 19 +++ .../tool-types-definition/.pi-map.index.md | 19 +++ .../specs/tool-types-definition/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../2026-05-25-add-config-profiles/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 29 ++++ .../specs/.pi-map.md | 18 +++ .../specs/config-profiles/.pi-map.index.md | 19 +++ .../specs/config-profiles/.pi-map.md | 19 +++ .../tool-config-management/.pi-map.index.md | 19 +++ .../specs/tool-config-management/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ .../specs/tool-instances/.pi-map.md | 19 +++ .../specs/user-config/.pi-map.index.md | 19 +++ .../specs/user-config/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 35 ++++ .../specs/.pi-map.md | 18 +++ .../frontend-foundation/.pi-map.index.md | 19 +++ .../specs/frontend-foundation/.pi-map.md | 19 +++ .../specs/mobile-navigation/.pi-map.index.md | 19 +++ .../specs/mobile-navigation/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../mobile-responsive-layouts/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../mobile-session-management/.pi-map.md | 19 +++ .../session-lifecycle-ux/.pi-map.index.md | 19 +++ .../specs/session-lifecycle-ux/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ .../specs/tool-instances/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 29 ++++ .../specs/.pi-map.md | 18 +++ .../specs/mobile-list-detail/.pi-map.index.md | 19 +++ .../specs/mobile-list-detail/.pi-map.md | 19 +++ .../specs/mobile-navigation/.pi-map.index.md | 19 +++ .../specs/mobile-navigation/.pi-map.md | 19 +++ .../mobile-repo-workspace/.pi-map.index.md | 19 +++ .../specs/mobile-repo-workspace/.pi-map.md | 19 +++ .../mobile-tools-navigation/.pi-map.index.md | 19 +++ .../specs/mobile-tools-navigation/.pi-map.md | 19 +++ .../.pi-map.index.md | 23 +++ .../backend-frontend-refactoring/.pi-map.md | 23 +++ .../.pi-map.index.md | 24 +++ .../config-profile-git-mounts/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 23 +++ .../specs/.pi-map.md | 18 +++ .../.pi-map.index.md | 19 +++ .../config-profile-git-mounts/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ .../specs/tool-instances/.pi-map.md | 19 +++ .../.pi-map.index.md | 24 +++ .../config-profile-includes-ui/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../.pi-map.index.md | 19 +++ .../.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../.pi-map.md | 19 +++ .../.pi-map.index.md | 28 ++++ .../.pi-map.md | 28 ++++ .../git-mount-url-validation/.pi-map.index.md | 19 +++ .../git-mount-url-validation/.pi-map.md | 19 +++ .../home-path-expansion/.pi-map.index.md | 19 +++ .../changes/home-path-expansion/.pi-map.md | 19 +++ .../mobile-terminal-ux/.pi-map.index.md | 24 +++ .../changes/mobile-terminal-ux/.pi-map.md | 22 +++ .../mobile-terminal-ux/specs/.pi-map.index.md | 26 +++ .../mobile-terminal-ux/specs/.pi-map.md | 18 +++ .../frontend-foundation/.pi-map.index.md | 19 +++ .../specs/frontend-foundation/.pi-map.md | 19 +++ .../specs/mobile-terminal-ux/.pi-map.index.md | 19 +++ .../specs/mobile-terminal-ux/.pi-map.md | 19 +++ .../specs/tool-terminal/.pi-map.index.md | 19 +++ .../specs/tool-terminal/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../mount-specificity-ordering/.pi-map.md | 19 +++ .../.pi-map.index.md | 26 +++ .../multi-session-terminal-ux/.pi-map.md | 26 +++ .../notification-center/.pi-map.index.md | 29 ++++ .../changes/notification-center/.pi-map.md | 29 ++++ .../.pi-map.index.md | 24 +++ .../persistent-terminal-sessions/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../specs/.pi-map.md | 18 +++ .../persistent-terminal/.pi-map.index.md | 19 +++ .../specs/persistent-terminal/.pi-map.md | 19 +++ .../reorganize-long-files/.pi-map.index.md | 22 +++ .../changes/reorganize-long-files/.pi-map.md | 22 +++ .../session-list-overhaul/.pi-map.index.md | 24 +++ .../changes/session-list-overhaul/.pi-map.md | 22 +++ .../specs/.pi-map.index.md | 20 +++ .../session-list-overhaul/specs/.pi-map.md | 18 +++ .../specs/session-list-ui/.pi-map.index.md | 19 +++ .../specs/session-list-ui/.pi-map.md | 19 +++ .../changes/ssh-key-mounting/.pi-map.index.md | 19 +++ openspec/changes/ssh-key-mounting/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../.pi-map.md | 19 +++ .../changes/working-copies/.pi-map.index.md | 23 +++ openspec/changes/working-copies/.pi-map.md | 23 +++ .../workspace-first-ui/.pi-map.index.md | 22 +++ .../changes/workspace-first-ui/.pi-map.md | 22 +++ openspec/designs/.pi-map.index.md | 23 +++ openspec/designs/.pi-map.md | 23 +++ openspec/docs/.pi-map.index.md | 19 +++ openspec/docs/.pi-map.md | 19 +++ openspec/explorations/.pi-map.index.md | 25 +++ openspec/explorations/.pi-map.md | 25 +++ openspec/proposals/.pi-map.index.md | 23 +++ openspec/proposals/.pi-map.md | 23 +++ openspec/specs/.pi-map.index.md | 124 +++++++++++++++ openspec/specs/.pi-map.md | 23 +++ .../specs/api-documentation/.pi-map.index.md | 19 +++ openspec/specs/api-documentation/.pi-map.md | 19 +++ openspec/specs/auth-oauth/.pi-map.index.md | 19 +++ openspec/specs/auth-oauth/.pi-map.md | 19 +++ .../specs/database-models/.pi-map.index.md | 19 +++ openspec/specs/database-models/.pi-map.md | 19 +++ .../docker-infrastructure/.pi-map.index.md | 19 +++ .../specs/docker-infrastructure/.pi-map.md | 19 +++ .../frontend-foundation/.pi-map.index.md | 19 +++ openspec/specs/frontend-foundation/.pi-map.md | 19 +++ openspec/specs/git-repo/.pi-map.index.md | 19 +++ openspec/specs/git-repo/.pi-map.md | 19 +++ .../specs/instance-proxy/.pi-map.index.md | 19 +++ openspec/specs/instance-proxy/.pi-map.md | 19 +++ .../instance-runtime-health/.pi-map.index.md | 19 +++ .../specs/instance-runtime-health/.pi-map.md | 19 +++ .../instance-startup-health/.pi-map.index.md | 19 +++ .../specs/instance-startup-health/.pi-map.md | 19 +++ .../specs/mobile-list-detail/.pi-map.index.md | 19 +++ openspec/specs/mobile-list-detail/.pi-map.md | 19 +++ .../specs/mobile-navigation/.pi-map.index.md | 19 +++ openspec/specs/mobile-navigation/.pi-map.md | 19 +++ .../mobile-repo-workspace/.pi-map.index.md | 19 +++ .../specs/mobile-repo-workspace/.pi-map.md | 19 +++ .../mobile-tools-navigation/.pi-map.index.md | 19 +++ .../specs/mobile-tools-navigation/.pi-map.md | 19 +++ .../opencode-web-server/.pi-map.index.md | 19 +++ openspec/specs/opencode-web-server/.pi-map.md | 19 +++ .../specs/project-management/.pi-map.index.md | 19 +++ openspec/specs/project-management/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../readiness-probe-integration/.pi-map.md | 19 +++ .../specs/repo-clone-mode/.pi-map.index.md | 19 +++ openspec/specs/repo-clone-mode/.pi-map.md | 19 +++ .../session-lifecycle-ux/.pi-map.index.md | 19 +++ .../specs/session-lifecycle-ux/.pi-map.md | 19 +++ openspec/specs/sessions-hub/.pi-map.index.md | 19 +++ openspec/specs/sessions-hub/.pi-map.md | 19 +++ .../smart-tunnel-recovery/.pi-map.index.md | 19 +++ .../specs/smart-tunnel-recovery/.pi-map.md | 19 +++ openspec/specs/ssh-keys/.pi-map.index.md | 19 +++ openspec/specs/ssh-keys/.pi-map.md | 19 +++ .../tool-config-management/.pi-map.index.md | 19 +++ .../specs/tool-config-management/.pi-map.md | 19 +++ .../specs/tool-instances/.pi-map.index.md | 19 +++ openspec/specs/tool-instances/.pi-map.md | 19 +++ .../tool-port-configuration/.pi-map.index.md | 19 +++ .../specs/tool-port-configuration/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../tool-terminal-startup-command/.pi-map.md | 19 +++ openspec/specs/tool-terminal/.pi-map.index.md | 19 +++ openspec/specs/tool-terminal/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../tool-type-port-visibility/.pi-map.md | 19 +++ .../.pi-map.index.md | 19 +++ .../tool-type-single-interface/.pi-map.md | 19 +++ .../tool-types-definition/.pi-map.index.md | 19 +++ .../specs/tool-types-definition/.pi-map.md | 19 +++ openspec/specs/tool-types/.pi-map.index.md | 19 +++ openspec/specs/tool-types/.pi-map.md | 19 +++ .../specs/traefik-deployment/.pi-map.index.md | 19 +++ openspec/specs/traefik-deployment/.pi-map.md | 19 +++ .../tunnel-health-monitoring/.pi-map.index.md | 19 +++ .../specs/tunnel-health-monitoring/.pi-map.md | 19 +++ openspec/specs/user-config/.pi-map.index.md | 19 +++ openspec/specs/user-config/.pi-map.md | 19 +++ openspec/specs/user-profile/.pi-map.index.md | 19 +++ openspec/specs/user-profile/.pi-map.md | 19 +++ openspec/tasks/.pi-map.index.md | 23 +++ openspec/tasks/.pi-map.md | 23 +++ scripts/.pi-map.index.md | 21 +++ scripts/.pi-map.md | 26 +++ tool-images/.pi-map.index.md | 24 +++ tool-images/.pi-map.md | 24 +++ 642 files changed, 14785 insertions(+) create mode 100644 .claude/.pi-map.index.md create mode 100644 .claude/.pi-map.md create mode 100644 .claude/skills/.pi-map.index.md create mode 100644 .claude/skills/.pi-map.md create mode 100644 .claude/skills/sift-backlog/.pi-map.index.md create mode 100644 .claude/skills/sift-backlog/.pi-map.md create mode 100644 .opencode/.pi-map.index.md create mode 100644 .opencode/.pi-map.md create mode 100644 .opencode/commands/.pi-map.index.md create mode 100644 .opencode/commands/.pi-map.md create mode 100644 .opencode/skills/.pi-map.index.md create mode 100644 .opencode/skills/.pi-map.md create mode 100644 .opencode/skills/openspec-apply-change/.pi-map.index.md create mode 100644 .opencode/skills/openspec-apply-change/.pi-map.md create mode 100644 .opencode/skills/openspec-archive-change/.pi-map.index.md create mode 100644 .opencode/skills/openspec-archive-change/.pi-map.md create mode 100644 .opencode/skills/openspec-explore/.pi-map.index.md create mode 100644 .opencode/skills/openspec-explore/.pi-map.md create mode 100644 .opencode/skills/openspec-propose/.pi-map.index.md create mode 100644 .opencode/skills/openspec-propose/.pi-map.md create mode 100644 .pi-map.index.md create mode 100644 .pi-map.md create mode 100644 .stoneforge/.pi-map.index.md create mode 100644 .stoneforge/.pi-map.md create mode 100644 .stoneforge/sync/.pi-map.index.md create mode 100644 .stoneforge/sync/.pi-map.md create mode 100644 apps/.pi-map.index.md create mode 100644 apps/.pi-map.md create mode 100644 apps/api/.pi-map.index.md create mode 100644 apps/api/.pi-map.md create mode 100644 apps/api/alembic/.pi-map.index.md create mode 100644 apps/api/alembic/.pi-map.md create mode 100644 apps/api/alembic/versions/.pi-map.index.md create mode 100644 apps/api/alembic/versions/.pi-map.md create mode 100644 apps/api/src/.pi-map.index.md create mode 100644 apps/api/src/.pi-map.md create mode 100644 apps/api/src/api/.pi-map.index.md create mode 100644 apps/api/src/api/.pi-map.md create mode 100644 apps/api/src/api/config/.pi-map.index.md create mode 100644 apps/api/src/api/config/.pi-map.md create mode 100644 apps/api/src/api/project/.pi-map.index.md create mode 100644 apps/api/src/api/project/.pi-map.md create mode 100644 apps/api/src/api/system/.pi-map.index.md create mode 100644 apps/api/src/api/system/.pi-map.md create mode 100644 apps/api/src/api/tool/.pi-map.index.md create mode 100644 apps/api/src/api/tool/.pi-map.md create mode 100644 apps/api/src/api/user/.pi-map.index.md create mode 100644 apps/api/src/api/user/.pi-map.md create mode 100644 apps/api/src/api/workspace/.pi-map.index.md create mode 100644 apps/api/src/api/workspace/.pi-map.md create mode 100644 apps/api/src/auth/.pi-map.index.md create mode 100644 apps/api/src/auth/.pi-map.md create mode 100644 apps/api/src/models/.pi-map.index.md create mode 100644 apps/api/src/models/.pi-map.md create mode 100644 apps/api/src/models/config/.pi-map.index.md create mode 100644 apps/api/src/models/config/.pi-map.md create mode 100644 apps/api/src/models/project/.pi-map.index.md create mode 100644 apps/api/src/models/project/.pi-map.md create mode 100644 apps/api/src/models/system/.pi-map.index.md create mode 100644 apps/api/src/models/system/.pi-map.md create mode 100644 apps/api/src/models/tool/.pi-map.index.md create mode 100644 apps/api/src/models/tool/.pi-map.md create mode 100644 apps/api/src/models/user/.pi-map.index.md create mode 100644 apps/api/src/models/user/.pi-map.md create mode 100644 apps/api/src/schemas/.pi-map.index.md create mode 100644 apps/api/src/schemas/.pi-map.md create mode 100644 apps/api/src/schemas/config/.pi-map.index.md create mode 100644 apps/api/src/schemas/config/.pi-map.md create mode 100644 apps/api/src/schemas/project/.pi-map.index.md create mode 100644 apps/api/src/schemas/project/.pi-map.md create mode 100644 apps/api/src/schemas/system/.pi-map.index.md create mode 100644 apps/api/src/schemas/system/.pi-map.md create mode 100644 apps/api/src/schemas/tool/.pi-map.index.md create mode 100644 apps/api/src/schemas/tool/.pi-map.md create mode 100644 apps/api/src/schemas/user/.pi-map.index.md create mode 100644 apps/api/src/schemas/user/.pi-map.md create mode 100644 apps/api/src/scripts/.pi-map.index.md create mode 100644 apps/api/src/scripts/.pi-map.md create mode 100644 apps/api/src/seeds/.pi-map.index.md create mode 100644 apps/api/src/seeds/.pi-map.md create mode 100644 apps/api/src/services/.pi-map.index.md create mode 100644 apps/api/src/services/.pi-map.md create mode 100644 apps/api/src/services/config/.pi-map.index.md create mode 100644 apps/api/src/services/config/.pi-map.md create mode 100644 apps/api/src/services/docker/.pi-map.index.md create mode 100644 apps/api/src/services/docker/.pi-map.md create mode 100644 apps/api/src/services/git/.pi-map.index.md create mode 100644 apps/api/src/services/git/.pi-map.md create mode 100644 apps/api/src/services/instance/.pi-map.index.md create mode 100644 apps/api/src/services/instance/.pi-map.md create mode 100644 apps/api/src/services/shared/.pi-map.index.md create mode 100644 apps/api/src/services/shared/.pi-map.md create mode 100644 apps/api/src/services/terminal/.pi-map.index.md create mode 100644 apps/api/src/services/terminal/.pi-map.md create mode 100644 apps/api/src/services/tool/.pi-map.index.md create mode 100644 apps/api/src/services/tool/.pi-map.md create mode 100644 apps/api/src/utils/.pi-map.index.md create mode 100644 apps/api/src/utils/.pi-map.md create mode 100644 apps/api/tests/.pi-map.index.md create mode 100644 apps/api/tests/.pi-map.md create mode 100644 apps/api/tests/api/.pi-map.index.md create mode 100644 apps/api/tests/api/.pi-map.md create mode 100644 apps/api/tests/integration/.pi-map.index.md create mode 100644 apps/api/tests/integration/.pi-map.md create mode 100644 apps/api/tests/services/.pi-map.index.md create mode 100644 apps/api/tests/services/.pi-map.md create mode 100644 apps/api/tests/system/.pi-map.index.md create mode 100644 apps/api/tests/system/.pi-map.md create mode 100644 apps/api/tests/unit/.pi-map.index.md create mode 100644 apps/api/tests/unit/.pi-map.md create mode 100644 apps/api/uploads/.pi-map.index.md create mode 100644 apps/api/uploads/.pi-map.md create mode 100644 apps/api/uploads/avatars/.pi-map.index.md create mode 100644 apps/api/uploads/avatars/.pi-map.md create mode 100644 apps/web/.pi-map.index.md create mode 100644 apps/web/.pi-map.md create mode 100644 apps/web/public/.pi-map.index.md create mode 100644 apps/web/public/.pi-map.md create mode 100644 apps/web/src/.pi-map.index.md create mode 100644 apps/web/src/.pi-map.md create mode 100644 apps/web/src/api/.pi-map.index.md create mode 100644 apps/web/src/api/.pi-map.md create mode 100644 apps/web/src/components/.pi-map.index.md create mode 100644 apps/web/src/components/.pi-map.md create mode 100644 apps/web/src/components/features/.pi-map.index.md create mode 100644 apps/web/src/components/features/.pi-map.md create mode 100644 apps/web/src/components/features/config-profiles/.pi-map.index.md create mode 100644 apps/web/src/components/features/config-profiles/.pi-map.md create mode 100644 apps/web/src/components/features/git/.pi-map.index.md create mode 100644 apps/web/src/components/features/git/.pi-map.md create mode 100644 apps/web/src/components/features/mobile/.pi-map.index.md create mode 100644 apps/web/src/components/features/mobile/.pi-map.md create mode 100644 apps/web/src/components/features/notification/.pi-map.index.md create mode 100644 apps/web/src/components/features/notification/.pi-map.md create mode 100644 apps/web/src/components/features/project/.pi-map.index.md create mode 100644 apps/web/src/components/features/project/.pi-map.md create mode 100644 apps/web/src/components/features/session/.pi-map.index.md create mode 100644 apps/web/src/components/features/session/.pi-map.md create mode 100644 apps/web/src/components/features/settings/.pi-map.index.md create mode 100644 apps/web/src/components/features/settings/.pi-map.md create mode 100644 apps/web/src/components/features/ssh-keys/.pi-map.index.md create mode 100644 apps/web/src/components/features/ssh-keys/.pi-map.md create mode 100644 apps/web/src/components/features/terminal/.pi-map.index.md create mode 100644 apps/web/src/components/features/terminal/.pi-map.md create mode 100644 apps/web/src/components/features/tool-workshop/.pi-map.index.md create mode 100644 apps/web/src/components/features/tool-workshop/.pi-map.md create mode 100644 apps/web/src/components/features/tool/.pi-map.index.md create mode 100644 apps/web/src/components/features/tool/.pi-map.md create mode 100644 apps/web/src/components/features/workspace/.pi-map.index.md create mode 100644 apps/web/src/components/features/workspace/.pi-map.md create mode 100644 apps/web/src/hooks/.pi-map.index.md create mode 100644 apps/web/src/hooks/.pi-map.md create mode 100644 apps/web/src/pages/.pi-map.index.md create mode 100644 apps/web/src/pages/.pi-map.md create mode 100644 apps/web/src/state/.pi-map.index.md create mode 100644 apps/web/src/state/.pi-map.md create mode 100644 apps/web/src/styles/.pi-map.index.md create mode 100644 apps/web/src/styles/.pi-map.md create mode 100644 apps/web/src/styles/pages/.pi-map.index.md create mode 100644 apps/web/src/styles/pages/.pi-map.md create mode 100644 apps/web/src/test/.pi-map.index.md create mode 100644 apps/web/src/test/.pi-map.md create mode 100644 apps/web/src/types/.pi-map.index.md create mode 100644 apps/web/src/types/.pi-map.md create mode 100644 apps/web/src/utils/.pi-map.index.md create mode 100644 apps/web/src/utils/.pi-map.md create mode 100644 docs/.pi-map.index.md create mode 100644 docs/.pi-map.md create mode 100644 docs/api/.pi-map.index.md create mode 100644 docs/api/.pi-map.md create mode 100644 docs/architecture/.pi-map.index.md create mode 100644 docs/architecture/.pi-map.md create mode 100644 docs/architecture/decisions/.pi-map.index.md create mode 100644 docs/architecture/decisions/.pi-map.md create mode 100644 docs/deployment/.pi-map.index.md create mode 100644 docs/deployment/.pi-map.md create mode 100644 docs/development/.pi-map.index.md create mode 100644 docs/development/.pi-map.md create mode 100644 docs/features/.pi-map.index.md create mode 100644 docs/features/.pi-map.md create mode 100644 docs/guides/.pi-map.index.md create mode 100644 docs/guides/.pi-map.md create mode 100644 docs/superpowers/.pi-map.index.md create mode 100644 docs/superpowers/.pi-map.md create mode 100644 docs/superpowers/plans/.pi-map.index.md create mode 100644 docs/superpowers/plans/.pi-map.md create mode 100644 docs/superpowers/specs/.pi-map.index.md create mode 100644 docs/superpowers/specs/.pi-map.md create mode 100644 docs/templates/.pi-map.index.md create mode 100644 docs/templates/.pi-map.md create mode 100644 e2e/.pi-map.index.md create mode 100644 e2e/.pi-map.md create mode 100644 e2e/tests/.pi-map.index.md create mode 100644 e2e/tests/.pi-map.md create mode 100644 openspec/.pi-map.index.md create mode 100644 openspec/.pi-map.md create mode 100644 openspec/changes/.pi-map.index.md create mode 100644 openspec/changes/.pi-map.md create mode 100644 openspec/changes/archive/.pi-map.index.md create mode 100644 openspec/changes/archive/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-user-profile/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md create mode 100644 openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-database-models/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-file-editor/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-git-control/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md create mode 100644 openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.md create mode 100644 openspec/changes/backend-frontend-refactoring/.pi-map.index.md create mode 100644 openspec/changes/backend-frontend-refactoring/.pi-map.md create mode 100644 openspec/changes/config-profile-git-mounts/.pi-map.index.md create mode 100644 openspec/changes/config-profile-git-mounts/.pi-map.md create mode 100644 openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md create mode 100644 openspec/changes/config-profile-git-mounts/specs/.pi-map.md create mode 100644 openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md create mode 100644 openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md create mode 100644 openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.md create mode 100644 openspec/changes/config-profile-includes-ui/.pi-map.index.md create mode 100644 openspec/changes/config-profile-includes-ui/.pi-map.md create mode 100644 openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md create mode 100644 openspec/changes/config-profile-includes-ui/specs/.pi-map.md create mode 100644 openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md create mode 100644 openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.md create mode 100644 openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md create mode 100644 openspec/changes/config-profile-multi-repo-mounts/.pi-map.md create mode 100644 openspec/changes/container-monitoring-notifications/.pi-map.index.md create mode 100644 openspec/changes/container-monitoring-notifications/.pi-map.md create mode 100644 openspec/changes/git-mount-url-validation/.pi-map.index.md create mode 100644 openspec/changes/git-mount-url-validation/.pi-map.md create mode 100644 openspec/changes/home-path-expansion/.pi-map.index.md create mode 100644 openspec/changes/home-path-expansion/.pi-map.md create mode 100644 openspec/changes/mobile-terminal-ux/.pi-map.index.md create mode 100644 openspec/changes/mobile-terminal-ux/.pi-map.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/.pi-map.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md create mode 100644 openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.md create mode 100644 openspec/changes/mount-specificity-ordering/.pi-map.index.md create mode 100644 openspec/changes/mount-specificity-ordering/.pi-map.md create mode 100644 openspec/changes/multi-session-terminal-ux/.pi-map.index.md create mode 100644 openspec/changes/multi-session-terminal-ux/.pi-map.md create mode 100644 openspec/changes/notification-center/.pi-map.index.md create mode 100644 openspec/changes/notification-center/.pi-map.md create mode 100644 openspec/changes/persistent-terminal-sessions/.pi-map.index.md create mode 100644 openspec/changes/persistent-terminal-sessions/.pi-map.md create mode 100644 openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md create mode 100644 openspec/changes/persistent-terminal-sessions/specs/.pi-map.md create mode 100644 openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md create mode 100644 openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.md create mode 100644 openspec/changes/reorganize-long-files/.pi-map.index.md create mode 100644 openspec/changes/reorganize-long-files/.pi-map.md create mode 100644 openspec/changes/session-list-overhaul/.pi-map.index.md create mode 100644 openspec/changes/session-list-overhaul/.pi-map.md create mode 100644 openspec/changes/session-list-overhaul/specs/.pi-map.index.md create mode 100644 openspec/changes/session-list-overhaul/specs/.pi-map.md create mode 100644 openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md create mode 100644 openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.md create mode 100644 openspec/changes/ssh-key-mounting/.pi-map.index.md create mode 100644 openspec/changes/ssh-key-mounting/.pi-map.md create mode 100644 openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md create mode 100644 openspec/changes/terminal-fullscreen-unified-header/.pi-map.md create mode 100644 openspec/changes/working-copies/.pi-map.index.md create mode 100644 openspec/changes/working-copies/.pi-map.md create mode 100644 openspec/changes/workspace-first-ui/.pi-map.index.md create mode 100644 openspec/changes/workspace-first-ui/.pi-map.md create mode 100644 openspec/designs/.pi-map.index.md create mode 100644 openspec/designs/.pi-map.md create mode 100644 openspec/docs/.pi-map.index.md create mode 100644 openspec/docs/.pi-map.md create mode 100644 openspec/explorations/.pi-map.index.md create mode 100644 openspec/explorations/.pi-map.md create mode 100644 openspec/proposals/.pi-map.index.md create mode 100644 openspec/proposals/.pi-map.md create mode 100644 openspec/specs/.pi-map.index.md create mode 100644 openspec/specs/.pi-map.md create mode 100644 openspec/specs/api-documentation/.pi-map.index.md create mode 100644 openspec/specs/api-documentation/.pi-map.md create mode 100644 openspec/specs/auth-oauth/.pi-map.index.md create mode 100644 openspec/specs/auth-oauth/.pi-map.md create mode 100644 openspec/specs/database-models/.pi-map.index.md create mode 100644 openspec/specs/database-models/.pi-map.md create mode 100644 openspec/specs/docker-infrastructure/.pi-map.index.md create mode 100644 openspec/specs/docker-infrastructure/.pi-map.md create mode 100644 openspec/specs/frontend-foundation/.pi-map.index.md create mode 100644 openspec/specs/frontend-foundation/.pi-map.md create mode 100644 openspec/specs/git-repo/.pi-map.index.md create mode 100644 openspec/specs/git-repo/.pi-map.md create mode 100644 openspec/specs/instance-proxy/.pi-map.index.md create mode 100644 openspec/specs/instance-proxy/.pi-map.md create mode 100644 openspec/specs/instance-runtime-health/.pi-map.index.md create mode 100644 openspec/specs/instance-runtime-health/.pi-map.md create mode 100644 openspec/specs/instance-startup-health/.pi-map.index.md create mode 100644 openspec/specs/instance-startup-health/.pi-map.md create mode 100644 openspec/specs/mobile-list-detail/.pi-map.index.md create mode 100644 openspec/specs/mobile-list-detail/.pi-map.md create mode 100644 openspec/specs/mobile-navigation/.pi-map.index.md create mode 100644 openspec/specs/mobile-navigation/.pi-map.md create mode 100644 openspec/specs/mobile-repo-workspace/.pi-map.index.md create mode 100644 openspec/specs/mobile-repo-workspace/.pi-map.md create mode 100644 openspec/specs/mobile-tools-navigation/.pi-map.index.md create mode 100644 openspec/specs/mobile-tools-navigation/.pi-map.md create mode 100644 openspec/specs/opencode-web-server/.pi-map.index.md create mode 100644 openspec/specs/opencode-web-server/.pi-map.md create mode 100644 openspec/specs/project-management/.pi-map.index.md create mode 100644 openspec/specs/project-management/.pi-map.md create mode 100644 openspec/specs/readiness-probe-integration/.pi-map.index.md create mode 100644 openspec/specs/readiness-probe-integration/.pi-map.md create mode 100644 openspec/specs/repo-clone-mode/.pi-map.index.md create mode 100644 openspec/specs/repo-clone-mode/.pi-map.md create mode 100644 openspec/specs/session-lifecycle-ux/.pi-map.index.md create mode 100644 openspec/specs/session-lifecycle-ux/.pi-map.md create mode 100644 openspec/specs/sessions-hub/.pi-map.index.md create mode 100644 openspec/specs/sessions-hub/.pi-map.md create mode 100644 openspec/specs/smart-tunnel-recovery/.pi-map.index.md create mode 100644 openspec/specs/smart-tunnel-recovery/.pi-map.md create mode 100644 openspec/specs/ssh-keys/.pi-map.index.md create mode 100644 openspec/specs/ssh-keys/.pi-map.md create mode 100644 openspec/specs/tool-config-management/.pi-map.index.md create mode 100644 openspec/specs/tool-config-management/.pi-map.md create mode 100644 openspec/specs/tool-instances/.pi-map.index.md create mode 100644 openspec/specs/tool-instances/.pi-map.md create mode 100644 openspec/specs/tool-port-configuration/.pi-map.index.md create mode 100644 openspec/specs/tool-port-configuration/.pi-map.md create mode 100644 openspec/specs/tool-terminal-startup-command/.pi-map.index.md create mode 100644 openspec/specs/tool-terminal-startup-command/.pi-map.md create mode 100644 openspec/specs/tool-terminal/.pi-map.index.md create mode 100644 openspec/specs/tool-terminal/.pi-map.md create mode 100644 openspec/specs/tool-type-port-visibility/.pi-map.index.md create mode 100644 openspec/specs/tool-type-port-visibility/.pi-map.md create mode 100644 openspec/specs/tool-type-single-interface/.pi-map.index.md create mode 100644 openspec/specs/tool-type-single-interface/.pi-map.md create mode 100644 openspec/specs/tool-types-definition/.pi-map.index.md create mode 100644 openspec/specs/tool-types-definition/.pi-map.md create mode 100644 openspec/specs/tool-types/.pi-map.index.md create mode 100644 openspec/specs/tool-types/.pi-map.md create mode 100644 openspec/specs/traefik-deployment/.pi-map.index.md create mode 100644 openspec/specs/traefik-deployment/.pi-map.md create mode 100644 openspec/specs/tunnel-health-monitoring/.pi-map.index.md create mode 100644 openspec/specs/tunnel-health-monitoring/.pi-map.md create mode 100644 openspec/specs/user-config/.pi-map.index.md create mode 100644 openspec/specs/user-config/.pi-map.md create mode 100644 openspec/specs/user-profile/.pi-map.index.md create mode 100644 openspec/specs/user-profile/.pi-map.md create mode 100644 openspec/tasks/.pi-map.index.md create mode 100644 openspec/tasks/.pi-map.md create mode 100644 scripts/.pi-map.index.md create mode 100644 scripts/.pi-map.md create mode 100644 tool-images/.pi-map.index.md create mode 100644 tool-images/.pi-map.md diff --git a/.claude/.pi-map.index.md b/.claude/.pi-map.index.md new file mode 100644 index 0000000..1ec30c5 --- /dev/null +++ b/.claude/.pi-map.index.md @@ -0,0 +1,20 @@ +# .claude (index) +dir: .claude + +## role +Configuration and instruction files for the Claude AI assistant integration. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- .claude/skills + index: .claude/skills/.pi-map.index.md + map: .claude/skills/.pi-map.md +## files +## links +index: .claude/.pi-map.index.md +map: .claude/.pi-map.md +## workflows +- +## dirty +- diff --git a/.claude/.pi-map.md b/.claude/.pi-map.md new file mode 100644 index 0000000..5e53043 --- /dev/null +++ b/.claude/.pi-map.md @@ -0,0 +1,18 @@ +# .claude +dir: .claude + +index: .claude/.pi-map.index.md + +## role +Configuration and instruction files for the Claude AI assistant integration. +## files +## arch +Simple flat-file configuration storage with no complex architecture; contains prompt templates, system instructions, or context files used to guide Claude's behavior in this project. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/.claude/skills/.pi-map.index.md b/.claude/skills/.pi-map.index.md new file mode 100644 index 0000000..1a0e0c6 --- /dev/null +++ b/.claude/skills/.pi-map.index.md @@ -0,0 +1,20 @@ +# .claude/skills (index) +dir: .claude/skills + +## role +Empty directory placeholder for future Claude Code skill definitions or custom AI-assisted workflows. +## parent +index: .claude/.pi-map.index.md +map: .claude/.pi-map.md +## children +- .claude/skills/sift-backlog + index: .claude/skills/sift-backlog/.pi-map.index.md + map: .claude/skills/sift-backlog/.pi-map.md +## files +## links +index: .claude/skills/.pi-map.index.md +map: .claude/skills/.pi-map.md +## workflows +- +## dirty +- diff --git a/.claude/skills/.pi-map.md b/.claude/skills/.pi-map.md new file mode 100644 index 0000000..33285cb --- /dev/null +++ b/.claude/skills/.pi-map.md @@ -0,0 +1,18 @@ +# .claude/skills +dir: .claude/skills + +index: .claude/skills/.pi-map.index.md + +## role +Empty directory placeholder for future Claude Code skill definitions or custom AI-assisted workflows. +## files +## arch +None (no files present); likely intended for declarative skill modules using Claude's skill system pattern. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/.claude/skills/sift-backlog/.pi-map.index.md b/.claude/skills/sift-backlog/.pi-map.index.md new file mode 100644 index 0000000..8fb2218 --- /dev/null +++ b/.claude/skills/sift-backlog/.pi-map.index.md @@ -0,0 +1,19 @@ +# .claude/skills/sift-backlog (index) +dir: .claude/skills/sift-backlog + +## role +Defines a workflow skill for triaging, organizing, and activating backlog tasks into actionable plans using a custom CLI tool. +## parent +index: .claude/skills/.pi-map.index.md +map: .claude/skills/.pi-map.md +## children +- +## files +- SKILL.md +## links +index: .claude/skills/sift-backlog/.pi-map.index.md +map: .claude/skills/sift-backlog/.pi-map.md +## workflows +- +## dirty +- diff --git a/.claude/skills/sift-backlog/.pi-map.md b/.claude/skills/sift-backlog/.pi-map.md new file mode 100644 index 0000000..cacaad9 --- /dev/null +++ b/.claude/skills/sift-backlog/.pi-map.md @@ -0,0 +1,19 @@ +# .claude/skills/sift-backlog +dir: .claude/skills/sift-backlog + +index: .claude/skills/sift-backlog/.pi-map.index.md + +## role +Defines a workflow skill for triaging, organizing, and activating backlog tasks into actionable plans using a custom CLI tool. +## files +- SKILL.md | Defines a workflow skill for triaging, organizing, and activating backlog tasks into actionable plans using a custom CLI tool. | dep: sf (custom CLI tool), task management system, plan management system +## arch +Skill-based workflow automation following a structured triage pipeline (scan → filter → prioritize → activate) with CLI tool integration for backlog management. +## tags +skill, defines, workflow, triaging, organizing, activating, backlog, tasks +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/.pi-map.index.md b/.opencode/.pi-map.index.md new file mode 100644 index 0000000..d6511f0 --- /dev/null +++ b/.opencode/.pi-map.index.md @@ -0,0 +1,23 @@ +# .opencode (index) +dir: .opencode + +## role +Configuration directory for the OpenCode AI coding assistant tool +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- .opencode/commands + index: .opencode/commands/.pi-map.index.md + map: .opencode/commands/.pi-map.md +- .opencode/skills + index: .opencode/skills/.pi-map.index.md + map: .opencode/skills/.pi-map.md +## files +## links +index: .opencode/.pi-map.index.md +map: .opencode/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/.pi-map.md b/.opencode/.pi-map.md new file mode 100644 index 0000000..21eac4f --- /dev/null +++ b/.opencode/.pi-map.md @@ -0,0 +1,18 @@ +# .opencode +dir: .opencode + +index: .opencode/.pi-map.index.md + +## role +Configuration directory for the OpenCode AI coding assistant tool +## files +## arch +Tool-specific configuration storage using standard dot-directory convention with likely JSON/YAML config files and optional workspace state/logs +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/commands/.pi-map.index.md b/.opencode/commands/.pi-map.index.md new file mode 100644 index 0000000..482ce1e --- /dev/null +++ b/.opencode/commands/.pi-map.index.md @@ -0,0 +1,22 @@ +# .opencode/commands (index) +dir: .opencode/commands + +## role +Defines structured workflow commands and AI assistant stances for an experimental OpenSpec-based development system that guides changes through exploration, proposal, implementation, and archival phases. +## parent +index: .opencode/.pi-map.index.md +map: .opencode/.pi-map.md +## children +- +## files +- opsx-apply.md +- opsx-archive.md +- opsx-explore.md +- opsx-propose.md +## links +index: .opencode/commands/.pi-map.index.md +map: .opencode/commands/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/commands/.pi-map.md b/.opencode/commands/.pi-map.md new file mode 100644 index 0000000..5de9054 --- /dev/null +++ b/.opencode/commands/.pi-map.md @@ -0,0 +1,22 @@ +# .opencode/commands +dir: .opencode/commands + +index: .opencode/commands/.pi-map.index.md + +## role +Defines structured workflow commands and AI assistant stances for an experimental OpenSpec-based development system that guides changes through exploration, proposal, implementation, and archival phases. +## files +- opsx-apply.md | Defines an experimental workflow skill for implementing tasks from an OpenSpec change through a structured, interactive process with CLI integration and progress tracking. | dep: openspec CLI, AskUserQuestion tool, filesystem (for reading context files) +- opsx-archive.md | Defines a workflow for archiving completed changes in an experimental openspec-based development system | dep: openspec CLI, AskUserQuestion tool, Task tool, Skill tool, filesystem (mkdir, mv), JSON parsing +- opsx-explore.md | Defines the "explore mode" stance for an AI assistant - a thinking/discovery mode for investigating problems and clarifying requirements without implementing code | dep: OpenSpec system +- opsx-propose.md | Defines a workflow for proposing new changes in the openspec system by creating a change directory and generating all required artifacts (proposal.md, design.md, tasks.md) in dependency order | dep: openspec CLI, AskUserQuestion tool, TodoWrite tool, JSON parsing +## arch +Markdown-based declarative workflow definitions using a command pattern where each `.md` file specifies a distinct operational stance or phase (explore/propose/apply/archive) with embedded metadata, structured steps, and CLI integration points for progressive change lifecycle management. +## tags +opsx, defines, workflow, openspec, openspec cli, askuserquestion tool, explore, experimental +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/skills/.pi-map.index.md b/.opencode/skills/.pi-map.index.md new file mode 100644 index 0000000..c1a37e4 --- /dev/null +++ b/.opencode/skills/.pi-map.index.md @@ -0,0 +1,29 @@ +# .opencode/skills (index) +dir: .opencode/skills + +## role +Contains reusable skill modules that provide specific capabilities or integrations for the OpenCode agent framework. +## parent +index: .opencode/.pi-map.index.md +map: .opencode/.pi-map.md +## children +- .opencode/skills/openspec-apply-change + index: .opencode/skills/openspec-apply-change/.pi-map.index.md + map: .opencode/skills/openspec-apply-change/.pi-map.md +- .opencode/skills/openspec-archive-change + index: .opencode/skills/openspec-archive-change/.pi-map.index.md + map: .opencode/skills/openspec-archive-change/.pi-map.md +- .opencode/skills/openspec-explore + index: .opencode/skills/openspec-explore/.pi-map.index.md + map: .opencode/skills/openspec-explore/.pi-map.md +- .opencode/skills/openspec-propose + index: .opencode/skills/openspec-propose/.pi-map.index.md + map: .opencode/skills/openspec-propose/.pi-map.md +## files +## links +index: .opencode/skills/.pi-map.index.md +map: .opencode/skills/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/skills/.pi-map.md b/.opencode/skills/.pi-map.md new file mode 100644 index 0000000..0efac59 --- /dev/null +++ b/.opencode/skills/.pi-map.md @@ -0,0 +1,18 @@ +# .opencode/skills +dir: .opencode/skills + +index: .opencode/skills/.pi-map.index.md + +## role +Contains reusable skill modules that provide specific capabilities or integrations for the OpenCode agent framework. +## files +## arch +Modular plugin-based architecture where each skill is a self-contained unit implementing standardized interfaces for dynamic discovery and loading by the agent core. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-apply-change/.pi-map.index.md b/.opencode/skills/openspec-apply-change/.pi-map.index.md new file mode 100644 index 0000000..c2b3bf5 --- /dev/null +++ b/.opencode/skills/openspec-apply-change/.pi-map.index.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-apply-change (index) +dir: .opencode/skills/openspec-apply-change + +## role +Provides a spec-driven AI skill that implements tasks from OpenSpec changes by applying structured modifications to a codebase. +## parent +index: .opencode/skills/.pi-map.index.md +map: .opencode/skills/.pi-map.md +## children +- +## files +- SKILL.md +## links +index: .opencode/skills/openspec-apply-change/.pi-map.index.md +map: .opencode/skills/openspec-apply-change/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-apply-change/.pi-map.md b/.opencode/skills/openspec-apply-change/.pi-map.md new file mode 100644 index 0000000..ac0c4e6 --- /dev/null +++ b/.opencode/skills/openspec-apply-change/.pi-map.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-apply-change +dir: .opencode/skills/openspec-apply-change + +index: .opencode/skills/openspec-apply-change/.pi-map.index.md + +## role +Provides a spec-driven AI skill that implements tasks from OpenSpec changes by applying structured modifications to a codebase. +## files +- SKILL.md | Defines an AI assistant skill for implementing tasks from an OpenSpec change using a spec-driven workflow | dep: openspec CLI, AskUserQuestion tool, filesystem access +## arch +Skill-based modular architecture using markdown-defined capabilities with a workflow-driven pattern that separates specification parsing from implementation execution. +## tags +skill, defines, assistant, implementing, tasks, openspec, change, spec +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-archive-change/.pi-map.index.md b/.opencode/skills/openspec-archive-change/.pi-map.index.md new file mode 100644 index 0000000..dcc1fbe --- /dev/null +++ b/.opencode/skills/openspec-archive-change/.pi-map.index.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-archive-change (index) +dir: .opencode/skills/openspec-archive-change + +## role +Provides a skill definition for archiving completed changes in an experimental workflow using the openspec CLI. +## parent +index: .opencode/skills/.pi-map.index.md +map: .opencode/skills/.pi-map.md +## children +- +## files +- SKILL.md +## links +index: .opencode/skills/openspec-archive-change/.pi-map.index.md +map: .opencode/skills/openspec-archive-change/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-archive-change/.pi-map.md b/.opencode/skills/openspec-archive-change/.pi-map.md new file mode 100644 index 0000000..3de49d1 --- /dev/null +++ b/.opencode/skills/openspec-archive-change/.pi-map.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-archive-change +dir: .opencode/skills/openspec-archive-change + +index: .opencode/skills/openspec-archive-change/.pi-map.index.md + +## role +Provides a skill definition for archiving completed changes in an experimental workflow using the openspec CLI. +## files +- SKILL.md | Defines a skill for archiving completed changes in an experimental workflow using the openspec CLI. | dep: openspec CLI, AskUserQuestion tool, Task tool, file system (mkdir, mv, read), JSON parsing +## arch +Single-file skill definition using markdown-based skill documentation pattern with CLI tool integration. +## tags +skill, defines, archiving, completed, changes, experimental, workflow, openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-explore/.pi-map.index.md b/.opencode/skills/openspec-explore/.pi-map.index.md new file mode 100644 index 0000000..720e4a2 --- /dev/null +++ b/.opencode/skills/openspec-explore/.pi-map.index.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-explore (index) +dir: .opencode/skills/openspec-explore + +## role +Defines a conversational AI skill that acts as a thinking partner for exploring ideas, investigating problems, and clarifying requirements without implementing code. +## parent +index: .opencode/skills/.pi-map.index.md +map: .opencode/skills/.pi-map.md +## children +- +## files +- SKILL.md +## links +index: .opencode/skills/openspec-explore/.pi-map.index.md +map: .opencode/skills/openspec-explore/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-explore/.pi-map.md b/.opencode/skills/openspec-explore/.pi-map.md new file mode 100644 index 0000000..5c0c982 --- /dev/null +++ b/.opencode/skills/openspec-explore/.pi-map.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-explore +dir: .opencode/skills/openspec-explore + +index: .opencode/skills/openspec-explore/.pi-map.index.md + +## role +Defines a conversational AI skill that acts as a thinking partner for exploring ideas, investigating problems, and clarifying requirements without implementing code. +## files +- SKILL.md | Defines a conversational AI skill/persona for "explore mode" - a thinking partner for exploring ideas, investigating problems, and clarifying requirements without implementing code. | dep: openspec CLI +## arch +Markdown-based skill definition using persona/role-prompting pattern with structured behavioral guidelines for non-implementation exploratory conversations. +## tags +skill, defines, conversational, persona, explore, mode, thinking, partner +## symbols +- +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-propose/.pi-map.index.md b/.opencode/skills/openspec-propose/.pi-map.index.md new file mode 100644 index 0000000..fb7e65c --- /dev/null +++ b/.opencode/skills/openspec-propose/.pi-map.index.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-propose (index) +dir: .opencode/skills/openspec-propose + +## role +Defines a structured workflow skill for proposing new changes using the openspec CLI, generating proposal, design, and task artifacts in dependency order. +## parent +index: .opencode/skills/.pi-map.index.md +map: .opencode/skills/.pi-map.md +## children +- +## files +- SKILL.md +## links +index: .opencode/skills/openspec-propose/.pi-map.index.md +map: .opencode/skills/openspec-propose/.pi-map.md +## workflows +- +## dirty +- diff --git a/.opencode/skills/openspec-propose/.pi-map.md b/.opencode/skills/openspec-propose/.pi-map.md new file mode 100644 index 0000000..f208bea --- /dev/null +++ b/.opencode/skills/openspec-propose/.pi-map.md @@ -0,0 +1,19 @@ +# .opencode/skills/openspec-propose +dir: .opencode/skills/openspec-propose + +index: .opencode/skills/openspec-propose/.pi-map.index.md + +## role +Defines a structured workflow skill for proposing new changes using the openspec CLI, generating proposal, design, and task artifacts in dependency order. +## files +- SKILL.md | Defines a structured workflow for proposing new changes using the openspec CLI, generating proposal, design, and task artifacts in dependency order. | dep: openspec CLI, AskUserQuestion tool, TodoWrite tool +## arch +Template-based skill definition using markdown documentation with structured workflow patterns for CLI-driven artifact generation and dependency-ordered execution. +## tags +skill, defines, structured, workflow, proposing, new, changes, openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/.pi-map.index.md b/.pi-map.index.md new file mode 100644 index 0000000..4ec0df9 --- /dev/null +++ b/.pi-map.index.md @@ -0,0 +1,79 @@ +# . (index) +dir: . + +## Project Map Protocol + +1. Read this protocol and the root `.pi-map.index.md` first. +2. Use `index:` / `map:` references to open relevant directory indexes and maps. +3. Load indexes before rich maps during task-start navigation. +4. Read the local rich map and actual source before editing. +5. Treat non-empty `## dirty` sections in either artifact as stale. +6. If source and generated artifacts disagree, trust source. +7. If map and index disagree, trust neither blindly; verify from source and regenerate the pair. +8. After editing source, run `project_map_patch` for each changed file. +9. Before broad architectural claims or final handoff, run `project_map_validate` when freshness matters. + +Trust boundary: index routes, map orients, source decides. + +## role +Infrastructure and deployment configuration package for a self-hosted project management platform with containerized services, SSO integration, and reverse proxy support. +## parent +- +## children +- .atl + index: .atl/.pi-map.index.md + map: .atl/.pi-map.md +- .claude + index: .claude/.pi-map.index.md + map: .claude/.pi-map.md +- .opencode + index: .opencode/.pi-map.index.md + map: .opencode/.pi-map.md +- .pi + index: .pi/.pi-map.index.md + map: .pi/.pi-map.md +- .sisyphus + index: .sisyphus/.pi-map.index.md + map: .sisyphus/.pi-map.md +- .stoneforge + index: .stoneforge/.pi-map.index.md + map: .stoneforge/.pi-map.md +- apps + index: apps/.pi-map.index.md + map: apps/.pi-map.md +- docs + index: docs/.pi-map.index.md + map: docs/.pi-map.md +- e2e + index: e2e/.pi-map.index.md + map: e2e/.pi-map.md +- minerv3 + index: minerv3/.pi-map.index.md + map: minerv3/.pi-map.md +- openspec + index: openspec/.pi-map.index.md + map: openspec/.pi-map.md +- scripts + index: scripts/.pi-map.index.md + map: scripts/.pi-map.md +- tool-images + index: tool-images/.pi-map.index.md + map: tool-images/.pi-map.md +## files +- .env.example +- .gitignore +- AGENTS.md +- CHANGELOG.md +- Makefile +- README.md +- docker-compose.traefik.yml +- docker-compose.yml +- progress.md +- swap-pane +## links +index: ./.pi-map.index.md +map: ./.pi-map.md +## workflows +- +## dirty +- diff --git a/.pi-map.md b/.pi-map.md new file mode 100644 index 0000000..5639d5b --- /dev/null +++ b/.pi-map.md @@ -0,0 +1,42 @@ +# . +dir: . + +index: ./.pi-map.index.md + +## Project Map Protocol + +1. Read this protocol and the root `.pi-map.index.md` first. +2. Use `index:` / `map:` references to open relevant directory indexes and maps. +3. Load indexes before rich maps during task-start navigation. +4. Read the local rich map and actual source before editing. +5. Treat non-empty `## dirty` sections in either artifact as stale. +6. If source and generated artifacts disagree, trust source. +7. If map and index disagree, trust neither blindly; verify from source and regenerate the pair. +8. After editing source, run `project_map_patch` for each changed file. +9. Before broad architectural claims or final handoff, run `project_map_validate` when freshness matters. + +Trust boundary: index routes, map orients, source decides. + +## role +Infrastructure and deployment configuration package for a self-hosted project management platform with containerized services, SSO integration, and reverse proxy support. +## files +- .env.example | Provides a template of environment variables for configuring a Headquarter application with PostgreSQL, Redis, Authentik SSO, and Docker/Traefik deployment +- .gitignore | Specifies patterns for files and directories that Git should ignore in this repository | dep: git, none +- AGENTS.md | Defines operational rules, workflows, and constraints for AI agents working within an OpenSpec-driven software development project. | dep: OpenSpec, superpowers, git, docker compose, conventional commits +- CHANGELOG.md | Documents version history and notable changes for a Git-based project management web application +- Makefile | Provides standard development commands for containerized web application lifecycle management via Docker Compose | dep: docker compose, alembic, pytest, ruff, mypy, playwright, npm, postgres, redis +- README.md | A self-hosted platform for managing projects, git repositories, and development tools with OAuth2 authentication. | dep: FastAPI, SQLAlchemy, Pydantic, Alembic, python-jose, React, TypeScript, Vite, React Router, Docker, PostgreSQL, Traefik, Authentik, Git +- docker-compose.traefik.yml | Deploys a multi-service web application (frontend, API, PostgreSQL, Redis) behind an existing Traefik reverse proxy with TLS termination and environment-configurable domains. | dep: docker, traefik, postgres, redis, authentik, docker-compose +- docker-compose.yml | Defines a multi-service Docker Compose stack with PostgreSQL, Redis, API backend, and web frontend services for a "headquarter" application | dep: Docker, PostgreSQL, Redis, Vite, asyncpg, nginx +- progress.md | Tracks completed and remaining tasks for a backend-frontend code refactoring project organized in 7 phases +- swap-pane | Empty file with no functionality +## arch +Docker Compose-based microservices architecture with environment-driven configuration, Traefik reverse proxy integration, and separation of concerns between backend API, frontend, PostgreSQL persistence, and Redis caching layers. +## tags +docker, redis, git, application, postgresql, compose, traefik, web +## symbols +- +## workflows +- +## dirty +- diff --git a/.stoneforge/.pi-map.index.md b/.stoneforge/.pi-map.index.md new file mode 100644 index 0000000..b5ef699 --- /dev/null +++ b/.stoneforge/.pi-map.index.md @@ -0,0 +1,23 @@ +# .stoneforge (index) +dir: .stoneforge + +## role +Hidden system directory storing runtime state, configuration, and version-control metadata for the Stoneforge application. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- .stoneforge/sync + index: .stoneforge/sync/.pi-map.index.md + map: .stoneforge/sync/.pi-map.md +## files +- .dashboard-opened +- .gitignore +- config.yaml +## links +index: .stoneforge/.pi-map.index.md +map: .stoneforge/.pi-map.md +## workflows +- +## dirty +- diff --git a/.stoneforge/.pi-map.md b/.stoneforge/.pi-map.md new file mode 100644 index 0000000..7aed4a8 --- /dev/null +++ b/.stoneforge/.pi-map.md @@ -0,0 +1,21 @@ +# .stoneforge +dir: .stoneforge + +index: .stoneforge/.pi-map.index.md + +## role +Hidden system directory storing runtime state, configuration, and version-control metadata for the Stoneforge application. +## files +- .dashboard-opened | Stores timestamp and identifier data for tracking when a dashboard was opened +- .gitignore | Specifies files and patterns for Git to ignore in version control +- config.yaml | Configuration file for the Stoneforge application defining database, sync, playbook, identity, merge, workflow, and agent settings. +## arch +Simple flat-file storage with YAML-based configuration, dotfile-based state tracking, and standard Git ignore patterns. +## tags +config, stores, timestamp, identifier, data, tracking, dashboard, was +## symbols +- +## workflows +- +## dirty +- diff --git a/.stoneforge/sync/.pi-map.index.md b/.stoneforge/sync/.pi-map.index.md new file mode 100644 index 0000000..f83bbb7 --- /dev/null +++ b/.stoneforge/sync/.pi-map.index.md @@ -0,0 +1,20 @@ +# .stoneforge/sync (index) +dir: .stoneforge/sync + +## role +Distributed task coordination and ephemeral worker agent management for a multi-agent execution system. +## parent +index: .stoneforge/.pi-map.index.md +map: .stoneforge/.pi-map.md +## children +- +## files +- dependencies.jsonl +- elements.jsonl +## links +index: .stoneforge/sync/.pi-map.index.md +map: .stoneforge/sync/.pi-map.md +## workflows +- +## dirty +- diff --git a/.stoneforge/sync/.pi-map.md b/.stoneforge/sync/.pi-map.md new file mode 100644 index 0000000..97f8014 --- /dev/null +++ b/.stoneforge/sync/.pi-map.md @@ -0,0 +1,20 @@ +# .stoneforge/sync +dir: .stoneforge/sync + +index: .stoneforge/sync/.pi-map.index.md + +## role +Distributed task coordination and ephemeral worker agent management for a multi-agent execution system. +## files +- dependencies.jsonl | Stores a sequence of dependency relationships between entities in JSON Lines format, tracking parent-child, blocking, and reply relationships with timestamps and creators. +- elements.jsonl | Stores JSONL records of ephemeral worker agents with their session history, worktree assignments, and lifecycle metadata for a distributed task execution system. +## arch +Event-sourced JSONL append-only logs with entity-relationship graph tracking, session-based worker lifecycle management, and decentralized worktree assignment. +## tags +stores, relationships, dependencies, elements, sequence, dependency, entities, json +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/.pi-map.index.md b/apps/.pi-map.index.md new file mode 100644 index 0000000..fe888c5 --- /dev/null +++ b/apps/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps (index) +dir: apps + +## role +Contains the main application entry points and executable modules for the project. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- apps/api + index: apps/api/.pi-map.index.md + map: apps/api/.pi-map.md +- apps/web + index: apps/web/.pi-map.index.md + map: apps/web/.pi-map.md +## files +## links +index: apps/.pi-map.index.md +map: apps/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/.pi-map.md b/apps/.pi-map.md new file mode 100644 index 0000000..c94de1e --- /dev/null +++ b/apps/.pi-map.md @@ -0,0 +1,18 @@ +# apps +dir: apps + +index: apps/.pi-map.index.md + +## role +Contains the main application entry points and executable modules for the project. +## files +## arch +Typically follows a modular architecture where each subdirectory represents a separate deployable application sharing common domain libraries. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/api/.pi-map.index.md b/apps/api/.pi-map.index.md new file mode 100644 index 0000000..fb1d36f --- /dev/null +++ b/apps/api/.pi-map.index.md @@ -0,0 +1,39 @@ +# apps/api (index) +dir: apps/api + +## role +Backend API server providing project management, git repository operations, and development tool orchestration via Docker containers. +## parent +index: apps/.pi-map.index.md +map: apps/.pi-map.md +## children +- apps/api/.pi-lens + index: apps/api/.pi-lens/.pi-map.index.md + map: apps/api/.pi-lens/.pi-map.md +- apps/api/alembic + index: apps/api/alembic/.pi-map.index.md + map: apps/api/alembic/.pi-map.md +- apps/api/src + index: apps/api/src/.pi-map.index.md + map: apps/api/src/.pi-map.md +- apps/api/tests + index: apps/api/tests/.pi-map.index.md + map: apps/api/tests/.pi-map.md +- apps/api/uploads + index: apps/api/uploads/.pi-map.index.md + map: apps/api/uploads/.pi-map.md +## files +- .dockerignore +- Dockerfile +- README.md +- alembic.ini +- pyproject.toml +- uv.lock +- wait-for-db.sh +## links +index: apps/api/.pi-map.index.md +map: apps/api/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/api/.pi-map.md b/apps/api/.pi-map.md new file mode 100644 index 0000000..fa9e602 --- /dev/null +++ b/apps/api/.pi-map.md @@ -0,0 +1,25 @@ +# apps/api +dir: apps/api + +index: apps/api/.pi-map.index.md + +## role +Backend API server providing project management, git repository operations, and development tool orchestration via Docker containers. +## files +- .dockerignore | Specifies files and directories to exclude from Docker build context to reduce image size and avoid copying unnecessary files into containers. | dep: Docker +- Dockerfile | Multi-stage Docker build for a Python application with Docker socket access, Cloudflare tunneling, and database dependency waiting | dep: python:3.11-slim, gcc, libpq-dev, docker-ce-cli, docker-compose-plugin, cloudflared, uvicorn, pyproject.toml dependencies +- README.md | Documentation for a self-hosted FastAPI backend API that manages projects, git repositories, and development tools via Docker instances. | dep: FastAPI, SQLAlchemy, PostgreSQL, asyncpg, Alembic, Docker, Docker Compose, Authentik, uvicorn, pytest, ruff, mypy +- alembic.ini | Configuration file for Alembic database migration tool connecting to a PostgreSQL database with async driver | dep: alembic, sqlalchemy, asyncpg, PostgreSQL +- pyproject.toml | Defines Python project metadata, dependencies, and tool configurations for a FastAPI-based backend API called "headquarter-api" | dep: fastapi, uvicorn, sqlalchemy, asyncpg, alembic, pydantic, pydantic-settings, python-multipart, httpx, structlog, cryptography, pytest, pytest-asyncio, mypy, ruff, aiosqlite +- uv.lock | Lock file for the uv Python package manager that pins exact dependency versions and their artifact hashes for reproducible installations | dep: uv, Python 3.11+, aiosqlite, alembic, annotated-doc, annotated-types, anyio, ast-serialize, asyncpg, and many other PyPI packages +- wait-for-db.sh | Wait for a PostgreSQL database to become available before executing a command, with configurable retry logic. | dep: nc (netcat), sh (POSIX shell), sleep +## arch +FastAPI-based async Python service with multi-stage Docker deployment, PostgreSQL database with Alembic migrations, Cloudflare tunnel integration, and uv package management. +## tags +docker, alembic, python, database, fastapi, postgresql, asyncpg, uvicorn +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/api/alembic/.pi-map.index.md b/apps/api/alembic/.pi-map.index.md new file mode 100644 index 0000000..140c5c8 --- /dev/null +++ b/apps/api/alembic/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/api/alembic (index) +dir: apps/api/alembic + +## role +Database migration tooling that manages schema versioning and changes for the API's PostgreSQL database using Alembic with async SQLAlchemy. +## parent +index: apps/api/.pi-map.index.md +map: apps/api/.pi-map.md +## children +- apps/api/alembic/versions + index: apps/api/alembic/versions/.pi-map.index.md + map: apps/api/alembic/versions/.pi-map.md +## files +- env.py +- script.py.mako +## links +index: apps/api/alembic/.pi-map.index.md +map: apps/api/alembic/.pi-map.md +## workflows +- change alembic behavior + read: env.py, script.py.mako +- explore alembic subdirectories + index: apps/api/alembic/versions/.pi-map.index.md +## dirty +- diff --git a/apps/api/alembic/.pi-map.md b/apps/api/alembic/.pi-map.md new file mode 100644 index 0000000..0994834 --- /dev/null +++ b/apps/api/alembic/.pi-map.md @@ -0,0 +1,23 @@ +# apps/api/alembic +dir: apps/api/alembic + +index: apps/api/alembic/.pi-map.index.md + +## role +Database migration tooling that manages schema versioning and changes for the API's PostgreSQL database using Alembic with async SQLAlchemy. +## files +- env.py | Configures Alembic database migration environment with async SQLAlchemy support for a project. | dep: alembic, sqlalchemy, sqlalchemy.ext.asyncio, logging.config, asyncio, src.config, src.models +- script.py.mako | Alembic database migration script template that generates upgrade/downgrade functions for SQLAlchemy schema migrations | dep: alembic, sqlalchemy +## arch +Template-driven migration pattern using Alembic's declarative configuration with async engine setup, environment context management, and auto-generated revision scripts with upgrade/downgrade function pairs. +## tags +sqlalchemy, alembic, database, migration, asyncio, config, src, env +## symbols +- +## workflows +- change alembic behavior + read: env.py, script.py.mako +- explore alembic subdirectories + index: apps/api/alembic/versions/.pi-map.index.md +## dirty +- diff --git a/apps/api/alembic/versions/.pi-map.index.md b/apps/api/alembic/versions/.pi-map.index.md new file mode 100644 index 0000000..8bfeb6c --- /dev/null +++ b/apps/api/alembic/versions/.pi-map.index.md @@ -0,0 +1,67 @@ +# apps/api/alembic/versions (index) +dir: apps/api/alembic/versions + +## role +Database schema evolution management for the API application, tracking incremental changes to tables supporting users, authentication, projects, git repositories, tool types/instances, config profiles, workspaces, monitoring, and notifications. +## parent +index: apps/api/alembic/.pi-map.index.md +map: apps/api/alembic/.pi-map.md +## children +- +## files +- 0001_initial_schema.py +- 0002_refresh_tokens.py +- 0003_user_configs.py +- 0004_tool_types.py +- 0005_ssh_keys_timestamps.py +- 0006_tool_instances.py +- 0007_instance_container_name.py +- 0008_tool_type_category.py +- 0009_tool_configs.py +- 0010_tool_type_default_port.py +- 0011_tool_instance_tunnel_fields.py +- 0012_default_port_req.py +- 0013_add_config_profiles.py +- 0013_add_probe_result.py +- 0014_add_profile_resolver_fields.py +- 0014_merge_heads.py +- 0015_single_interface.py +- 069d3da4dc9b_add_ssh_key_id_to_config_profiles.py +- 20260527160017_add_pi_agent_tool_type.py +- 2026_05_22_add_clone_mode.py +- 2026_05_23_remove_is_builtin.py +- 2026_05_24_220141_add_startup_command.py +- 2026_05_24_add_config_profiles.py +- 2026_05_26_add_git_mounts.py +- 2026_05_27_external_repos.py +- 2026_05_28_add_monitoring_tables.py +- 2026_05_28_add_terminal_sessions_table.py +- 2026_05_28_add_tool_definition_manifests.py +- 2026_05_28_drop_tool_configs_and_config_folders.py +- 2026_05_29_add_notifications_table.py +- 2026_05_29_add_ssh_key_ids_to_tool_instances.py +- 2026_05_29_drop_ssh_key_id_from_config_profiles.py +- 2026_05_29_fix_code_server_bind_addr.py +- 2026_05_29_fix_code_server_bind_addr_port.py +- 2026_05_29_fix_web_tool_bind_address.py +- 2026_05_29_remove_lsio_command_override.py +- 2026_05_29_remove_ssh_keys_mount_from_manifest.py +- 2026_06_01_add_workspaces.py +- 398082499c30_add_tool_config_fields.py +- 6fc7bfcf199f_merge_remove_is_builtin_and_add_config_.py +- 86cec91fdb00_merge_profile_resolver_and_workspaces_.py +- 8ed7dd80973d_create_config_folders_table.py +- af8512103d67_add_tool_type_fields.py +- f3d2dc90ba3a_merge_single_interface_and_clone_mode.py +## links +index: apps/api/alembic/versions/.pi-map.index.md +map: apps/api/alembic/versions/.pi-map.md +## workflows +- change versions behavior + read: 0001_initial_schema.py, 0002_refresh_tokens.py, 0003_user_configs.py +- change versions CLI + read: 2026_05_24_220141_add_startup_command.py, 2026_05_29_remove_lsio_command_override.py +- change versions config + read: 0003_user_configs.py, 0009_tool_configs.py, 0013_add_config_profiles.py +## dirty +- diff --git a/apps/api/alembic/versions/.pi-map.md b/apps/api/alembic/versions/.pi-map.md new file mode 100644 index 0000000..7ec55b0 --- /dev/null +++ b/apps/api/alembic/versions/.pi-map.md @@ -0,0 +1,74 @@ +# apps/api/alembic/versions +dir: apps/api/alembic/versions + +index: apps/api/alembic/versions/.pi-map.index.md + +## role +Database schema evolution management for the API application, tracking incremental changes to tables supporting users, authentication, projects, git repositories, tool types/instances, config profiles, workspaces, monitoring, and notifications. +## files +- 0001_initial_schema.py | Defines the initial database schema migration creating five tables (users, ssh_keys, projects, git_repositories, user_configs) with relationships, indexes, and constraints using Alembic. | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.String, call:postgresql.UUID, call:sa.DateTime, call:sa.func.now, call:sa.PrimaryKeyConstraint, call:sa.UniqueConstraint, call:op.create_index, call:op.f, call:sa.Text, call:sa.ForeignKeyConstraint, call:sa.Boolean, call:postgresql.JSONB, func:downgrade() → None, call:op.drop_table, call:op.drop_index, call:op.f | dep: alembic, sqlalchemy.dialects, sqlalchemy, postgresql dialect +- 0002_refresh_tokens.py | Alembic database migration that creates a refresh_tokens table with indexes for user authentication token management | exp: func:upgrade() → None, call:op.get_bind, call:sa.inspect, call:inspector.has_table, call:op.create_table, call:sa.Column, call:postgresql.UUID, call:sa.String, call:sa.DateTime, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:sa.UniqueConstraint, call:inspector.get_indexes, call:op.f, call:op.create_index, func:downgrade() → None, call:op.get_bind, call:sa.inspect, call:inspector.has_table, call:inspector.get_indexes, call:op.f, call:op.drop_index, call:op.drop_table | dep: alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 0003_user_configs.py | Alembic database migration that creates a user_configs table with JSON configuration storage linked to users | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.UUID, call:sa.JSON, call:sa.DateTime, call:sa.text, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:sa.UniqueConstraint, func:downgrade() → None, call:op.drop_table | dep: typing, alembic, sqlalchemy +- 0004_tool_types.py | Alembic database migration that creates a tool_types table with metadata, templates, and versioning columns for a tool management system. | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.Uuid, call:sa.String, call:sa.Text, call:sa.JSON, call:sa.Boolean, call:sa.ForeignKey, call:sa.DateTime, call:sa.text, func:downgrade() → None, call:op.drop_table | dep: typing, alembic, sqlalchemy +- 0005_ssh_keys_timestamps.py | Alembic database migration that adds created_at and updated_at timestamp columns to the ssh_keys table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.DateTime, call:sa.text, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 0006_tool_instances.py | Alembic database migration that creates a tool_instances table with columns for tracking deployed tool instances, their status, container info, and foreign key relationships to tool_types, git_repositories, projects, and users. | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:postgresql.UUID, call:sa.text, call:sa.String, call:sa.Integer, call:sa.DateTime, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:op.create_index, func:downgrade() → None, call:op.drop_index, call:op.drop_table | dep: typing, alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 0007_instance_container_name.py | Alembic database migration that adds a nullable container_name column to the tool_instances table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.String, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 0008_tool_type_category.py | Alembic database migration that adds `category` and `interfaces` columns to the `tool_types` table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.String, call:sa.JSON, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 0009_tool_configs.py | Alembic database migration that creates a tool_configs table with UUID keys, foreign key relationships, and indexes for storing user/project tool configuration settings. | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:postgresql.UUID, call:sa.text, call:sa.String, call:sa.Text, call:sa.DateTime, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:op.create_index, func:downgrade() → None, call:op.drop_index, call:op.drop_table | dep: typing, alembic, sqlalchemy.dialects, sqlalchemy, postgresql dialect +- 0010_tool_type_default_port.py | Alembic database migration that adds a nullable default_port column to the tool_types table. | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.Integer, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 0011_tool_instance_tunnel_fields.py | Alembic database migration that adds tunnel-related fields (public_url and tunnel_id) to the tool_instances table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.String, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 0012_default_port_req.py | Alembic database migration that populates null default_port values for existing tool types and then makes the column non-nullable | exp: func:upgrade() → None, call:op.execute, call:op.alter_column, call:sa.Integer, func:downgrade() → None, call:op.alter_column, call:sa.Integer | dep: typing, alembic, sqlalchemy +- 0013_add_config_profiles.py | Alembic database migration that adds config profiles, includes, mounts tables and links tool instances to profiles with defensive idempotent checks | exp: func:_table_exists(table_name: str) → bool, call:sa.inspect(op.get_bind()).has_table, call:op.get_bind, func:_column_exists(table_name: str, column_name: str) → bool, call:_table_exists, call:sa.inspect(op.get_bind()).get_columns, call:op.get_bind, func:_index_exists(table_name: str, index_name: str) → bool, call:_table_exists, call:sa.inspect(op.get_bind()).get_indexes, call:op.get_bind, func:_foreign_key_exists(table_name: str, constrained_columns: list[str], referred_table: str) → bool, call:_table_exists, call:sa.inspect(op.get_bind()).get_foreign_keys, call:op.get_bind, call:foreign_key.get, func:upgrade() → None, call:_table_exists, call:op.create_table, call:sa.Column, call:postgresql.UUID, call:sa.String, call:sa.Text, call:sa.DateTime, call:sa.text, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:sa.UniqueConstraint, call:_index_exists, call:op.create_index, call:sa.Integer, call:_column_exists, call:op.add_column, call:_foreign_key_exists, call:op.create_foreign_key, func:downgrade() → None, call:op.drop_index, call:op.drop_constraint, call:op.drop_column, call:op.drop_table | dep: collections.abc, alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 0013_add_probe_result.py | Alembic database migration that adds a JSON probe_result column to the tool_instances table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 0014_add_profile_resolver_fields.py | Alembic database migration that adds profile resolver fields (project_id, tool_type_id, environment_variables, etc.) to config_profiles table and restructures config_mounts table (renaming mount_path to target_path, adding mode/files, removing content/source_profile_id). | exp: func:_table_exists(table_name: str) → bool, call:sa.inspect(op.get_bind()).has_table, call:op.get_bind, func:_column_exists(table_name: str, column_name: str) → bool, call:_table_exists, call:sa.inspect(op.get_bind()).get_columns, call:op.get_bind, func:_index_exists(table_name: str, index_name: str) → bool, call:_table_exists, call:sa.inspect(op.get_bind()).get_indexes, call:op.get_bind, func:_foreign_key_exists(table_name: str, constrained_columns: list[str], referred_table: str) → bool, call:_table_exists, call:sa.inspect(op.get_bind()).get_foreign_keys, call:op.get_bind, call:foreign_key.get, func:_foreign_key_names_for_column(table_name: str, column_name: str) → list[str], call:_table_exists, call:sa.inspect(op.get_bind()).get_foreign_keys, call:op.get_bind, call:foreign_key.get, call:names.append, func:upgrade() → None, call:_column_exists, call:op.add_column, call:sa.Column, call:postgresql.UUID, call:sa.JSON, call:sa.Text, call:sa.Integer, call:sa.Boolean, call:_foreign_key_exists, call:op.create_foreign_key, call:_index_exists, call:op.create_index, call:op.alter_column, call:sa.String, call:_foreign_key_names_for_column, call:op.drop_constraint, call:op.drop_column, func:downgrade() → None, call:op.add_column, call:sa.Column, call:postgresql.UUID, call:sa.Text, call:op.drop_column, call:op.alter_column, call:op.drop_index, call:op.drop_constraint | dep: collections.abc, alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 0014_merge_heads.py | Alembic merge migration that reconciles two divergent migration branches into a single history line | exp: func:upgrade() → None, func:downgrade() → None | dep: typing, alembic +- 0015_single_interface.py | Alembic database migration that replaces a JSON array `interfaces` column with `interface_type` string and `requires_port` boolean columns in the `tool_types` table, with dialect-specific data migration for PostgreSQL and SQLite. | exp: func:_get_dialect() → str, call:op.get_bind, func:upgrade() → None, call:_get_dialect, call:op.add_column, call:sa.Column, call:sa.String, call:sa.Boolean, call:op.execute, call:op.alter_column, call:op.drop_column, call:op.create_check_constraint, call:sa.text, func:downgrade() → None, call:_get_dialect, call:op.drop_constraint, call:op.add_column, call:sa.Column, call:postgresql.JSONB, call:sa.Text, call:op.execute, call:sa.JSON, call:op.drop_column | dep: typing, alembic, sqlalchemy.dialects, sqlalchemy, postgresql (dialect) +- 069d3da4dc9b_add_ssh_key_id_to_config_profiles.py | Alembic database migration that adds a nullable UUID foreign key column `ssh_key_id` to the `config_profiles` table referencing `ssh_keys.id` with SET NULL on delete | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.Uuid, call:sa.ForeignKey, func:downgrade() → None, call:op.drop_column | dep: alembic, sqlalchemy +- 20260527160017_add_pi_agent_tool_type.py | Alembic database migration that adds a "pi-agent" terminal-based coding tool type to a tool_types table with Docker configuration templates | exp: func:upgrade() → None, call:op.get_bind, call:conn.execute( sa.text("SELECT id FROM tool_types WHERE name = 'pi-agent'") ).fetchone, call:sa.text, call:json.dumps, func:downgrade() → None, call:op.get_bind, call:conn.execute, call:sa.text | dep: json, typing, alembic, uuid, sqlalchemy +- 2026_05_22_add_clone_mode.py | Alembic database migration that adds ssh_key_id foreign key to git_repositories table and clone_mode/branch columns to tool_instances table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:postgresql.UUID, call:op.create_foreign_key, call:sa.String, func:downgrade() → None, call:op.drop_column, call:op.drop_constraint | dep: alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 2026_05_23_remove_is_builtin.py | Alembic database migration to remove the `is_builtin` column from the `tool_types` table | exp: func:upgrade() → None, call:op.execute, func:downgrade() → None, call:op.add_column, call:sa.Column, call:sa.Boolean | dep: alembic, sqlalchemy +- 2026_05_24_220141_add_startup_command.py | Alembic database migration that adds a nullable `startup_command` text column to the `tool_types` table. | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.Text, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 2026_05_24_add_config_profiles.py | Alembic database migration that creates config_profiles and config_profile_includes tables with indexes, and adds a foreign key column to tool_instances for managing user configuration profiles. | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:postgresql.UUID, call:sa.text, call:sa.ForeignKey, call:sa.String, call:sa.Text, call:postgresql.JSONB, call:sa.Boolean, call:sa.DateTime, call:sa.PrimaryKeyConstraint, call:sa.UniqueConstraint, call:op.create_index, call:sa.Integer, call:op.add_column, func:downgrade() → None, call:op.drop_index, call:op.drop_column, call:op.drop_table | dep: typing, alembic, sqlalchemy.dialects, sqlalchemy, postgresql dialect +- 2026_05_26_add_git_mounts.py | Alembic database migration that adds a git_mounts JSON column to the config_profiles table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.JSON, func:downgrade() → None, call:op.drop_column | dep: typing, alembic, sqlalchemy +- 2026_05_27_external_repos.py | Alembic database migration that makes project_id nullable in git_repositories table to support external repositories and expands alembic_version version_num column to 64 characters. | exp: func:upgrade() → None, call:op.execute, call:op.alter_column, call:sa.UUID, func:downgrade() → None, call:op.alter_column, call:sa.UUID, call:op.execute | dep: typing, alembic, sqlalchemy +- 2026_05_28_add_monitoring_tables.py | Alembic database migration that creates monitoring tables (instance_events and health_checks) with indexes for tracking tool instance events and health checks | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.Uuid, call:sa.String, call:sa.Text, call:sa.JSON, call:sa.DateTime, call:sa.func.now, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:op.create_index, call:sa.Boolean, call:sa.Integer, func:downgrade() → None, call:op.drop_index, call:op.drop_table | dep: collections.abc, alembic, sqlalchemy +- 2026_05_28_add_terminal_sessions_table.py | Alembic database migration that creates a terminal_sessions table with tracking columns and foreign key to tool_instances | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.UUID, call:sa.String, call:sa.DateTime, call:sa.text, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:op.create_index, call:op.f, func:downgrade() → None, call:op.drop_index, call:op.f, call:op.drop_table | dep: collections.abc, alembic, sqlalchemy +- 2026_05_28_add_tool_definition_manifests.py | Alembic database migration that creates a tool_definition_manifests table, adds manifest-related columns to tool_types and tool_instances, and migrates existing pi-agent data from Dockerfile templates to JSON-based manifest definitions | exp: func:upgrade() → None, call:op.get_bind, call:op.create_table, call:sa.Column, call:sa.UUID, call:sa.String, call:sa.Text, call:sa.JSON, call:sa.Boolean, call:sa.TIMESTAMP, call:sa.func.now, call:sa.PrimaryKeyConstraint, call:sa.UniqueConstraint, call:sa.ForeignKeyConstraint, call:sa.CheckConstraint, call:conn.execute, call:sa.text, call:result.fetchone, call:op.add_column, call:op.create_foreign_key, call:op.drop_constraint, call:op.execute, call:json.dumps, call:str, func:downgrade() → None, call:op.get_bind, call:conn.execute, call:sa.text, call:result.fetchone, call:op.drop_column, call:op.drop_constraint, call:op.drop_table | dep: json, uuid, typing, alembic, sqlalchemy +- 2026_05_28_drop_tool_configs_and_config_folders.py | Alembic database migration that drops `tool_configs` and `config_folders` tables with conditional existence checks and full downgrade recreation | exp: func:upgrade() → None, call:op.get_bind, call:conn.execute, call:sa.text, call:result.fetchone, call:op.drop_table, func:downgrade() → None, call:op.create_table, call:sa.Column, call:sa.UUID, call:sa.String, call:sa.Text, call:sa.JSON, call:sa.Boolean, call:sa.TIMESTAMP, call:sa.func.now, call:sa.PrimaryKeyConstraint, call:sa.Integer | dep: typing, alembic, sqlalchemy +- 2026_05_29_add_notifications_table.py | Alembic database migration that creates a notifications table with user-linked, categorized, severity-graded messages supporting read/dismissed tracking and optimized querying indexes. | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.Uuid, call:sa.String, call:sa.Text, call:sa.JSON, call:sa.DateTime, call:sa.func.now, call:sa.ForeignKeyConstraint, call:sa.PrimaryKeyConstraint, call:op.create_index, call:sa.text, func:downgrade() → None, call:op.drop_index, call:op.drop_table | dep: collections.abc, alembic, sqlalchemy +- 2026_05_29_add_ssh_key_ids_to_tool_instances.py | Alembic database migration that adds a JSON column named ssh_key_ids to the tool_instances table | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.JSON, func:downgrade() → None, call:op.drop_column | dep: alembic, sqlalchemy +- 2026_05_29_drop_ssh_key_id_from_config_profiles.py | Alembic database migration that removes the ssh_key_id column from the config_profiles table | exp: func:upgrade() → None, call:op.drop_column, func:downgrade() → None, call:op.add_column, call:sa.Column, call:sa.Uuid, call:sa.ForeignKey | dep: alembic, sqlalchemy +- 2026_05_29_fix_code_server_bind_addr.py | Alembic database migration that fixes code-server tool type compose templates by replacing deprecated `--bind-addr` flag with `--host` flag | exp: func:upgrade() → None, call:op.get_bind, call:conn.execute( sa.text(""" SELECT id, compose_template FROM tool_types WHERE name = 'code-server' AND compose_template LIKE '%--bind-addr%' """) ).fetchall, call:sa.text, call:compose_template.replace( "--bind-addr 0.0.0.0:8443", "--host 0.0.0.0" ).replace, call:print, func:downgrade() → None | dep: typing, alembic, sqlalchemy +- 2026_05_29_fix_code_server_bind_addr_port.py | Alembic database migration that fixes code-server Docker compose templates and instance files by replacing broken `--host` flags with correct `--bind-addr 0.0.0.0:port` configurations | exp: func:_fix_tool_type_templates(conn) → None, call:conn.execute( sa.text(""" SELECT id, compose_template, default_port FROM tool_types WHERE name = 'code-server' AND compose_template LIKE '%--host%' """) ).fetchall, call:sa.text, call:compose_template.split, call:len, call:line.lstrip, call:new_lines.append, call:"\n".join, call:print, func:_fix_instance_compose_files(conn) → None, call:conn.execute( sa.text(""" SELECT column_name FROM information_schema.columns WHERE table_name = 'tool_instances' AND column_name = 'compose_path' """) ).fetchone, call:sa.text, call:print, call:conn.execute( sa.text(""" SELECT id, compose_path, tool_type_id FROM tool_instances WHERE compose_path IS NOT NULL """) ).fetchall, call:Path, call:path.exists, call:path.read_text, call:conn.execute( sa.text(""" SELECT default_port FROM tool_types WHERE id = :id """), {"id": tool_type_id}, ).fetchone, call:yaml.safe_load, call:data["services"].values, call:path.write_text, call:yaml.dump, func:upgrade() → None, call:op.get_bind, call:_fix_tool_type_templates, call:_fix_instance_compose_files, func:downgrade() → None | dep: typing, alembic, yaml, pathlib, sqlalchemy +- 2026_05_29_fix_web_tool_bind_address.py | Alembic database migration that updates code-server and jupyter-notebook tool type compose templates to bind to 0.0.0.0 | exp: func:_fix_code_server_compose(conn) → None, call:conn.execute( sa.text(""" SELECT id, compose_template, definition_type FROM tool_types WHERE name = 'code-server' """) ).fetchone, call:sa.text, call:compose_template.split, call:enumerate, call:len, call:line.lstrip, call:new_lines.append, call:image_line.lstrip, call:new_lines.index, call:new_lines.insert, call:"\n".join, call:print, func:_fix_jupyter_compose(conn) → None, call:conn.execute( sa.text(""" SELECT id, compose_template, definition_type FROM tool_types WHERE name = 'jupyter-notebook' """) ).fetchone, call:sa.text, call:compose_template.split, call:enumerate, call:new_lines.append, call:len, call:line.lstrip, call:"\n".join, call:print, func:upgrade() → None, call:op.get_bind, call:_fix_code_server_compose, call:_fix_jupyter_compose, func:downgrade() → None | dep: typing, alembic, sqlalchemy +- 2026_05_29_remove_lsio_command_override.py | Alembic database migration that removes broken command overrides containing --bind-addr or --host flags from LinuxServer.io code-server Docker Compose templates in both database tool_types records and on-disk instance compose files. | exp: func:upgrade() → None, call:op.get_bind, call:conn.execute( sa.text(""" SELECT id, compose_template FROM tool_types WHERE name = 'code-server' """) ).fetchall, call:sa.text, call:yaml.safe_load, call:data["services"].values, call:svc.get, call:yaml.dump, call:print, call:conn.execute( sa.text(""" SELECT column_name FROM information_schema.columns WHERE table_name = 'tool_instances' AND column_name = 'compose_path' """) ).fetchone, call:conn.execute( sa.text(""" SELECT id, compose_path FROM tool_instances WHERE compose_path IS NOT NULL """) ).fetchall, call:Path, call:path.exists, call:path.read_text, call:path.write_text, func:downgrade() → None | dep: collections.abc, alembic, yaml, pathlib, sqlalchemy, pathlib.Path, information_schema +- 2026_05_29_remove_ssh_keys_mount_from_manifest.py | Alembic database migration that removes (or restores) the ssh_keys mount from a JSON manifest stored in the tool_definition_manifests table for the pi-agent tool definition. | exp: func:upgrade() → None, call:op.get_bind, call:conn.execute, call:sa.text, call:result.fetchone, call:isinstance, call:json.loads, call:manifest.get, call:len, call:m.get, call:json.dumps, func:downgrade() → None, call:op.get_bind, call:conn.execute, call:sa.text, call:result.fetchone, call:isinstance, call:json.loads, call:manifest.get, call:any, call:m.get, call:mounts.append, call:json.dumps | dep: json, typing, alembic, sqlalchemy +- 2026_06_01_add_workspaces.py | Alembic database migration that creates a workspaces table with foreign keys to git_repositories and users, adds indexes, and adds a workspace_id column to tool_instances | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:sa.Uuid, call:sa.String, call:sa.ForeignKey, call:sa.DateTime, call:sa.text, call:sa.UniqueConstraint, call:op.create_index, call:op.add_column, func:downgrade() → None, call:op.drop_index, call:op.drop_column, call:op.drop_table | dep: collections.abc, alembic, sqlalchemy +- 398082499c30_add_tool_config_fields.py | Alembic database migration that adds five new columns (port_override, start_command, working_directory, environment_variables, volumes) to the tool_configs table with a port range check constraint. | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.Integer, call:sa.Text, call:postgresql.JSONB, call:op.create_check_constraint, call:sa.text, func:downgrade() → None, call:op.drop_constraint, call:op.drop_column | dep: alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- 6fc7bfcf199f_merge_remove_is_builtin_and_add_config_.py | Alembic database migration that merges two parallel revision branches (removing is_builtin and adding config_profiles) into a single history line | exp: func:upgrade() → None, func:downgrade() → None | dep: alembic +- 86cec91fdb00_merge_profile_resolver_and_workspaces_.py | Alembic database migration that merges two divergent migration branches (profile resolver and workspaces) into a single head | exp: func:upgrade() → None, func:downgrade() → None | dep: alembic +- 8ed7dd80973d_create_config_folders_table.py | Alembic database migration that creates a config_folders table with user-owned configuration folders supporting JSONB file storage and project overrides | exp: func:upgrade() → None, call:op.create_table, call:sa.Column, call:postgresql.UUID, call:sa.text, call:sa.ForeignKey, call:sa.String, call:sa.Text, call:postgresql.JSONB, call:sa.Boolean, call:sa.DateTime, call:sa.UniqueConstraint, call:op.create_index, func:downgrade() → None, call:op.drop_index, call:op.drop_table | dep: alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- af8512103d67_add_tool_type_fields.py | Alembic database migration that adds new columns (definition_type, dockerfile_template, build_context, readiness_probe) to the tool_types table with a CHECK constraint on definition_type. | exp: func:upgrade() → None, call:op.add_column, call:sa.Column, call:sa.String, call:sa.Text, call:postgresql.JSONB, call:op.create_check_constraint, call:sa.text, func:downgrade() → None, call:op.drop_constraint, call:op.drop_column | dep: alembic, sqlalchemy.dialects, sqlalchemy, sqlalchemy.dialects.postgresql +- f3d2dc90ba3a_merge_single_interface_and_clone_mode.py | Alembic database migration that merges two prior revisions (single_interface and clone_mode) into a single migration path | exp: func:upgrade() → None, func:downgrade() → None | dep: typing, alembic +## arch +Linear and branched Alembic migration pattern with merge migrations to reconcile divergent branches, using incremental revision files with upgrade/downgrade functions, idempotent operations, and occasional data migrations for schema transformations. +## tags +column, table, call:op.drop, key, alembic, downgrade, upgrade, constraint +## symbols +- upgrade +- downgrade +- _table_exists +- _column_exists +- _index_exists +- _foreign_key_exists +- _foreign_key_names_for_column +- _get_dialect +## workflows +- change versions behavior + read: 0001_initial_schema.py, 0002_refresh_tokens.py, 0003_user_configs.py +- change versions CLI + read: 2026_05_24_220141_add_startup_command.py, 2026_05_29_remove_lsio_command_override.py +- change versions config + read: 0003_user_configs.py, 0009_tool_configs.py, 0013_add_config_profiles.py +## dirty +- diff --git a/apps/api/src/.pi-map.index.md b/apps/api/src/.pi-map.index.md new file mode 100644 index 0000000..7b141b2 --- /dev/null +++ b/apps/api/src/.pi-map.index.md @@ -0,0 +1,51 @@ +# apps/api/src (index) +dir: apps/api/src + +## role +Core application package for the Headquarter API backend service, providing configuration, database connectivity, structured logging, and FastAPI application orchestration. +## parent +index: apps/api/.pi-map.index.md +map: apps/api/.pi-map.md +## children +- apps/api/src/api + index: apps/api/src/api/.pi-map.index.md + map: apps/api/src/api/.pi-map.md +- apps/api/src/auth + index: apps/api/src/auth/.pi-map.index.md + map: apps/api/src/auth/.pi-map.md +- apps/api/src/models + index: apps/api/src/models/.pi-map.index.md + map: apps/api/src/models/.pi-map.md +- apps/api/src/schemas + index: apps/api/src/schemas/.pi-map.index.md + map: apps/api/src/schemas/.pi-map.md +- apps/api/src/scripts + index: apps/api/src/scripts/.pi-map.index.md + map: apps/api/src/scripts/.pi-map.md +- apps/api/src/seeds + index: apps/api/src/seeds/.pi-map.index.md + map: apps/api/src/seeds/.pi-map.md +- apps/api/src/services + index: apps/api/src/services/.pi-map.index.md + map: apps/api/src/services/.pi-map.md +- apps/api/src/utils + index: apps/api/src/utils/.pi-map.index.md + map: apps/api/src/utils/.pi-map.md +## files +- __init__.py +- config.py +- database.py +- logging_config.py +- main.py +## links +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## workflows +- change src behavior + read: __init__.py, config.py, database.py +- change src config + read: config.py, logging_config.py +- explore src subdirectories + index: apps/api/src/api/.pi-map.index.md, apps/api/src/auth/.pi-map.index.md, apps/api/src/models/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/.pi-map.md b/apps/api/src/.pi-map.md new file mode 100644 index 0000000..ea0c992 --- /dev/null +++ b/apps/api/src/.pi-map.md @@ -0,0 +1,35 @@ +# apps/api/src +dir: apps/api/src + +index: apps/api/src/.pi-map.index.md + +## role +Core application package for the Headquarter API backend service, providing configuration, database connectivity, structured logging, and FastAPI application orchestration. +## files +- __init__.py | Marks the directory as a Python package for the Headquarter API. +- config.py | Defines application configuration settings using Pydantic with environment variable loading, database URL construction, and computed properties for service URLs and OAuth endpoints. | exp: class:Settings, func:build_database_url(user: str, password: str, host: str, port: int, database: str) → str | dep: pydantic, pydantic_settings +- database.py | Configures async SQLAlchemy database engine and session factory, and provides retry logic for database initialization with Alembic migrations via subprocess. | exp: func:init_database(max_retries, retry_delay) → bool, call:range, call:engine.connect, call:test_conn.execute, call:text, call:test_conn.close, call:logger.info, call:asyncio.get_event_loop().run_in_executor, call:subprocess.run, call:logger.debug, call:logger.error, call:asyncio.sleep, call:str(exc).lower, call:logger.warning | dep: asyncio, logging, subprocess, sqlalchemy.ext.asyncio, sqlalchemy.pool, src.config, sqlalchemy +- logging_config.py | Configures structured JSON logging with correlation ID injection, custom formatters, and HTTP request/exception middleware for a FastAPI application. | exp: class:CorrelationIdFilter, method:filter(self, record: logging.LogRecord) → bool, call:get_correlation_id, class:JSONFormatter, method:format(self, record: logging.LogRecord) → str, call:self.formatTime, call:record.getMessage, call:getattr, call:self.formatException, call:json.dumps, method:formatTime(self, record: logging.LogRecord, datefmt) → str, call:time.strftime, call:time.gmtime, class:RequestLoggingMiddleware, method:dispatch(self, request: Request, call_next: Callable) → Response, call:time.time, call:logger.info, call:call_next, call:int, call:logger.error, call:type, call:traceback.format_exc, class:ExceptionLoggingMiddleware, method:dispatch(self, request: Request, call_next: Callable) → Response, call:call_next, call:logger.critical, call:traceback.format_exc, func:configure_logging(level) → None, call:JSONFormatter, call:logging.StreamHandler, call:console_handler.setFormatter, call:console_handler.addFilter, call:CorrelationIdFilter, call:root_logger.setLevel, call:logging.getLogger("uvicorn").setLevel, call:logging.getLogger("uvicorn.access").setLevel, call:logging.getLogger("sqlalchemy.engine").setLevel, call:logger.info, call:logging.getLevelName | dep: json, logging, sys, time, traceback, collections.abc, fastapi, starlette.middleware.base, src.services.shared.correlation +- main.py | FastAPI application entry point that initializes and configures the Headquarter API with routers, middleware, database, health monitoring, and CORS | exp: func:_sanitize_validation_errors(errors), call:error.get, call:str, call:ctx.items, call:isinstance, call:type, call:sanitized.append, func:validation_exception_handler(request: Request, exc: RequestValidationError), call:exc.errors, call:logger.warning, call:_sanitize_validation_errors, call:JSONResponse, func:on_startup(), call:logger.info, call:init_database, call:logger.error, call:sys.exit, call:_health_monitor.start, call:seed_builtin_tool_types, func:on_shutdown(), call:logger.info, call:_health_monitor.stop | dep: logging, os, fastapi, fastapi.exceptions, fastapi.middleware.cors, fastapi.responses, fastapi.staticfiles, src.api.config, src.api.project, src.api.system, src.api.tool, src.api.user, src.api.workspace, src.config, src.models, src.database, src.logging_config, src.seeds.builtin_tool_types, src.services.instance, src.services.shared, sys, src.api.* +## arch +Layered architecture with Pydantic-based configuration management, async SQLAlchemy with Alembic migrations, structured JSON logging with correlation ID tracing, and modular FastAPI setup with middleware pipeline and health monitoring. +## tags +src, database, logging, call:logger.info, api, middleware, fastapi, filter +## symbols +- Settings +- CorrelationIdFilter +- JSONFormatter +- RequestLoggingMiddleware +- ExceptionLoggingMiddleware +- build_database_url +- init_database +- filter +## workflows +- change src behavior + read: __init__.py, config.py, database.py +- change src config + read: config.py, logging_config.py +- explore src subdirectories + index: apps/api/src/api/.pi-map.index.md, apps/api/src/auth/.pi-map.index.md, apps/api/src/models/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/api/.pi-map.index.md b/apps/api/src/api/.pi-map.index.md new file mode 100644 index 0000000..9ca26c1 --- /dev/null +++ b/apps/api/src/api/.pi-map.index.md @@ -0,0 +1,40 @@ +# apps/api/src/api (index) +dir: apps/api/src/api + +## role +Defines reusable Pydantic validators for API request/response schema validation across the API layer. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- apps/api/src/api/config + index: apps/api/src/api/config/.pi-map.index.md + map: apps/api/src/api/config/.pi-map.md +- apps/api/src/api/project + index: apps/api/src/api/project/.pi-map.index.md + map: apps/api/src/api/project/.pi-map.md +- apps/api/src/api/system + index: apps/api/src/api/system/.pi-map.index.md + map: apps/api/src/api/system/.pi-map.md +- apps/api/src/api/tool + index: apps/api/src/api/tool/.pi-map.index.md + map: apps/api/src/api/tool/.pi-map.md +- apps/api/src/api/user + index: apps/api/src/api/user/.pi-map.index.md + map: apps/api/src/api/user/.pi-map.md +- apps/api/src/api/workspace + index: apps/api/src/api/workspace/.pi-map.index.md + map: apps/api/src/api/workspace/.pi-map.md +## files +- __init__.py +- shared_validators.py +## links +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## workflows +- change api behavior + read: __init__.py, shared_validators.py +- explore api subdirectories + index: apps/api/src/api/config/.pi-map.index.md, apps/api/src/api/project/.pi-map.index.md, apps/api/src/api/system/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/api/.pi-map.md b/apps/api/src/api/.pi-map.md new file mode 100644 index 0000000..9e60eec --- /dev/null +++ b/apps/api/src/api/.pi-map.md @@ -0,0 +1,30 @@ +# apps/api/src/api +dir: apps/api/src/api + +index: apps/api/src/api/.pi-map.index.md + +## role +Defines reusable Pydantic validators for API request/response schema validation across the API layer. +## files +- __init__.py | Marks the directory as a Python package for API routers. +- shared_validators.py | Provides reusable Pydantic validator functions for API schema validation including mount paths, files, environment variables, and volume mounts. | exp: func:validate_mount_path(v: str | None) → str | None, call:v.startswith, raise:ValueError, func:validate_files(v: dict | None, max_size_bytes) → dict | None, call:v.items, call:path.startswith, call:len, call:content.encode, raise:ValueError, func:validate_env_vars(v: dict | None) → dict | None, call:isinstance, raise:ValueError, func:validate_volumes(v: list | None) → list | None, call:isinstance, call:enumerate, raise:ValueError +## arch +Utility module pattern providing shared, composable validation functions using Pydantic's validator system for common container/docker-like domain objects (mounts, volumes, files, env vars). +## tags +validate, raise:value, error, call:isinstance, mount, api, init, path +## symbols +- validate_mount_path +- validate_files +- validate_env_vars +- validate_volumes +- call:v.startswith +- raise:ValueError +- call:v.items +- call:path.startswith +## workflows +- change api behavior + read: __init__.py, shared_validators.py +- explore api subdirectories + index: apps/api/src/api/config/.pi-map.index.md, apps/api/src/api/project/.pi-map.index.md, apps/api/src/api/system/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/api/config/.pi-map.index.md b/apps/api/src/api/config/.pi-map.index.md new file mode 100644 index 0000000..11c36b7 --- /dev/null +++ b/apps/api/src/api/config/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/api/config (index) +dir: apps/api/src/api/config + +## role +Exposes REST API endpoints for managing user configuration profiles and settings. +## parent +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## children +- +## files +- __init__.py +- config_profiles.py +- user_config.py +## links +index: apps/api/src/api/config/.pi-map.index.md +map: apps/api/src/api/config/.pi-map.md +## workflows +- change config behavior + read: __init__.py, config_profiles.py, user_config.py +- change config config + read: config_profiles.py, user_config.py +## dirty +- diff --git a/apps/api/src/api/config/.pi-map.md b/apps/api/src/api/config/.pi-map.md new file mode 100644 index 0000000..852f2ef --- /dev/null +++ b/apps/api/src/api/config/.pi-map.md @@ -0,0 +1,31 @@ +# apps/api/src/api/config +dir: apps/api/src/api/config + +index: apps/api/src/api/config/.pi-map.index.md + +## role +Exposes REST API endpoints for managing user configuration profiles and settings. +## files +- __init__.py | Aggregates and exports configuration-related API routers for the config module. | dep: src.api.config.config_profiles, src.api.config.user_config +- config_profiles.py | FastAPI router providing CRUD endpoints for user config profiles with includes, resolution, defaults, and git URL validation | exp: func:list_config_profiles(project_id, tool_type_id, current_user_id, session), call:select(ConfigProfile) .where(ConfigProfile.user_id == user_uuid) .options, call:selectinload, call:uuid.UUID, call:conditions.append, call:ConfigProfile.project_id.is_, call:ConfigProfile.tool_type_id.is_, call:query.where, call:or_, call:session.execute, call:result.scalars().all, call:profile_to_response, func:create_config_profile(data: ConfigProfileCreate, current_user_id, session), call:create_profile, call:logger.debug, call:profile_to_response, func:get_config_profile(profile_id: str, current_user_id, session), call:get_profile_with_includes, call:uuid.UUID, call:profile_to_response, raise:HTTPException, func:update_config_profile(profile_id: str, data: ConfigProfileUpdate, current_user_id, session), call:get_profile_with_includes, call:uuid.UUID, call:update_profile, call:logger.debug, call:profile_to_response, raise:HTTPException, func:delete_config_profile(profile_id: str, current_user_id, session), call:get_profile_with_includes, call:uuid.UUID, call:session.delete, call:session.commit, call:logger.debug, raise:HTTPException, func:update_profile_includes_endpoint(profile_id: str, data: ConfigProfileIncludeUpdate, current_user_id, session), call:get_profile_with_includes, call:uuid.UUID, call:update_includes, call:session.execute, call:select(ConfigProfileInclude).where, call:inc_result.scalars().all, call:logger.debug, call:profile_to_response, call:list, raise:HTTPException, func:preview_config_profile(profile_id: str, current_user_id, session), call:get_profile_with_includes, call:uuid.UUID, call:resolve_profile, call:resolved_profile_to_dict, raise:HTTPException, func:resolve_default_profile_endpoint(project_id, tool_type_id, current_user_id, session), call:resolve_default_profile, call:uuid.UUID, func:get_default_profiles_endpoint(user_id, session) → dict, call:session.execute, call:select(UserConfig).where, call:result.scalar_one_or_none, func:set_default_profiles_endpoint(data: DefaultProfilesUpdate, user_id, session) → dict, call:validate_default_profiles, call:get_or_create_user_config, call:session.commit, call:session.refresh, func:get_default_profile_for_tool_type_endpoint(tool_type_id: str, user_id, session) → dict, call:session.execute, call:select(UserConfig).where, call:result.scalar_one_or_none, call:user_config.default_profiles.get, func:validate_git_url_endpoint(data: ValidateGitUrlRequest, current_user_id, session) → ValidateGitUrlResponse, call:validate_git_url | dep: logging, uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, sqlalchemy.orm, src.auth.dependencies, src.models, src.schemas.config, src.services.config.config_profile_resolver, src.services.config.crud_service, src.services.config.resolver_service +- user_config.py | Provides FastAPI endpoints to get and update the current user's configuration settings, creating a default config if none exists. | exp: func:_get_or_create_config(session: AsyncSession, user_id: uuid.UUID) → UserConfig, call:session.execute, call:select(UserConfig).where, call:result.scalar_one_or_none, call:UserConfig, call:session.add, call:session.commit, call:session.refresh, func:get_user_config(user_id, session) → UserConfigResponse, call:_get_user, call:_get_or_create_config, call:UserConfigResponse.model_validate, func:update_user_config(data: UserConfigUpdate, user_id, session) → UserConfigResponse, call:_get_user, call:_get_or_create_config, call:data.model_dump, call:logger.debug, call:session.commit, call:session.refresh, call:UserConfigResponse.model_validate | dep: logging, uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.schemas.user +## arch +FastAPI router modules following domain-driven separation with CRUD patterns, validation logic, and automatic default initialization. +## tags +config, profile, get, user, includes, call:uuid.uuid, or, default +## symbols +- list_config_profiles +- create_config_profile +- get_config_profile +- update_config_profile +- delete_config_profile +- update_profile_includes_endpoint +- preview_config_profile +- resolve_default_profile_endpoint +## workflows +- change config behavior + read: __init__.py, config_profiles.py, user_config.py +- change config config + read: config_profiles.py, user_config.py +## dirty +- diff --git a/apps/api/src/api/project/.pi-map.index.md b/apps/api/src/api/project/.pi-map.index.md new file mode 100644 index 0000000..e5e2eda --- /dev/null +++ b/apps/api/src/api/project/.pi-map.index.md @@ -0,0 +1,22 @@ +# apps/api/src/api/project (index) +dir: apps/api/src/api/project + +## role +Provides REST API endpoints for project and Git repository management in the backend service. +## parent +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## children +- +## files +- __init__.py +- git_repositories.py +- projects.py +## links +index: apps/api/src/api/project/.pi-map.index.md +map: apps/api/src/api/project/.pi-map.md +## workflows +- change project behavior + read: __init__.py, git_repositories.py, projects.py +## dirty +- diff --git a/apps/api/src/api/project/.pi-map.md b/apps/api/src/api/project/.pi-map.md new file mode 100644 index 0000000..e517ee7 --- /dev/null +++ b/apps/api/src/api/project/.pi-map.md @@ -0,0 +1,29 @@ +# apps/api/src/api/project +dir: apps/api/src/api/project + +index: apps/api/src/api/project/.pi-map.index.md + +## role +Provides REST API endpoints for project and Git repository management in the backend service. +## files +- __init__.py | Aggregates and exports project-related API routers from submodules. | dep: src.api.project.git_repositories, src.api.project.projects +- git_repositories.py | Implements FastAPI REST endpoints for managing Git repositories, including CRUD operations, SSH key management, file browsing, branch operations, and git commands (clone, commit, push, pull, merge, etc.) for both project-scoped and external repositories. | exp: func:_get_repo(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID) → GitRepository, call:_get_user, call:_get_owned_project, call:session.get, raise:HTTPException, func:_get_repo_on_disk(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID) → GitRepository, call:_get_repo, call:os.path.exists, raise:HTTPException, func:_parse_remote_url(remote_url: str | None, force_original: bool) → str | None, call:parse_git_url, call:parse_result.get, raise:HTTPException, func:_commit_author(session: AsyncSession, user_id: uuid.UUID) → tuple[str, str], call:_get_user, func:list_user_repositories(user_id, session) → list[GitRepository], call:session.execute, call:select(GitRepository).where, call:list, call:result.scalars().all, func:parse_repository_url(data: URLParseRequest) → URLParseResponse, call:URLParseResponse, call:parse_git_url, func:create_external_repository(data: GitRepositoryCreate, user_id, session) → GitRepository, call:_get_user, call:session.execute, call:select(GitRepository).where, call:GitRepository.project_id.is_, call:existing.scalar_one_or_none, call:_parse_remote_url, call:uuid.UUID, call:session.get, call:preflight_remote_repository, call:session.add, call:session.flush, call:clone_working_repository, call:session.rollback, call:init_working_repository, call:session.commit, raise:HTTPException, func:list_repositories(project_id: uuid.UUID, user_id, session) → list[GitRepository], call:_get_user, call:_get_owned_project, call:session.execute, call:select(GitRepository).where, call:list, call:result.scalars().all, func:delete_repository(project_id: uuid.UUID, repo_id: uuid.UUID, user_id, session) → Response, call:_get_repo, call:os.path.exists, call:shutil.rmtree, call:session.delete, call:session.commit, call:Response, func:create_repository(project_id: uuid.UUID, data: GitRepositoryCreate, user_id, session) → GitRepository, call:_get_user, call:_get_owned_project, call:session.execute, call:select(GitRepository).where, call:existing.scalar_one_or_none, call:_parse_remote_url, call:uuid.UUID, call:session.get, call:preflight_remote_repository, call:get_repo_path, call:os.makedirs, call:os.path.dirname, call:clone_working_repository, call:init_working_repository, call:GitRepository, call:session.add, call:session.commit, call:session.refresh, raise:HTTPException, func:update_repository_ssh_key(project_id: uuid.UUID, repo_id: uuid.UUID, data: UpdateSSHKeyRequest, user_id, session) → GitRepository, call:_get_repo, call:uuid.UUID, call:session.get, call:session.commit, call:session.refresh, raise:HTTPException, func:get_repository_history(project_id: uuid.UUID, repo_id: uuid.UUID, view, branch, limit, offset, user_id, session) → dict, call:_get_repo_on_disk, call:get_commit_history, raise:HTTPException, func:get_repository_commit(project_id: uuid.UUID, repo_id: uuid.UUID, commit_hash: str, user_id, session) → dict, call:_get_repo_on_disk, call:get_commit_detail, raise:HTTPException, func:list_repository_files(project_id: uuid.UUID, repo_id: uuid.UUID, branch, path, user_id, session) → FileListResponse, call:_get_repo_on_disk, call:list_tree, call:FileListResponse, call:logger.error, call:str, raise:HTTPException, func:get_repository_file_content(project_id: uuid.UUID, repo_id: uuid.UUID, branch: str, path: str, user_id, session) → FileContentResponse, call:_get_repo_on_disk, call:get_file_content, call:FileContentResponse, raise:HTTPException, func:get_repository_branches(project_id: uuid.UUID, repo_id: uuid.UUID, user_id, session) → BranchesResponse, call:_get_repo, call:os.path.isdir, call:os.path.join, call:os.path.isfile, call:list_branches, call:BranchesResponse, call:logger.error, call:str, call:session.get, call:list_remote_branches, raise:HTTPException, func:update_repository_file(project_id: uuid.UUID, repo_id: uuid.UUID, data: FileUpdateRequest, user_id, session) → FileUpdateResponse, call:_get_repo_on_disk, call:_commit_author, call:commit_file, call:FileUpdateResponse, raise:HTTPException, func:get_repository_status(project_id: uuid.UUID, repo_id: uuid.UUID, user_id, session) → StatusResponse, call:_get_repo_on_disk, call:get_status, call:StatusResponse, raise:HTTPException, func:create_repository_branch(project_id: uuid.UUID, repo_id: uuid.UUID, data: BranchCreateRequest, user_id, session) → dict, call:_get_repo_on_disk, call:create_branch, raise:HTTPException, func:delete_repository_branch(project_id: uuid.UUID, repo_id: uuid.UUID, branch_name: str, force, user_id, session) → dict, call:_get_repo_on_disk, call:delete_branch, raise:HTTPException, func:checkout_repository_branch(project_id: uuid.UUID, repo_id: uuid.UUID, data: CheckoutRequest, user_id, session) → dict, call:_get_repo_on_disk, call:checkout_branch, raise:HTTPException, func:commit_repository_changes(project_id: uuid.UUID, repo_id: uuid.UUID, data: CommitRequest, user_id, session) → CommitResponse, call:_get_repo_on_disk, call:_commit_author, call:commit_changes, call:CommitResponse, raise:HTTPException, func:fetch_repository(project_id: uuid.UUID, repo_id: uuid.UUID, user_id, session) → FetchResponse, call:_get_repo_on_disk, call:fetch, call:FetchResponse, raise:HTTPException, func:pull_repository(project_id: uuid.UUID, repo_id: uuid.UUID, branch, user_id, session) → PullResponse, call:_get_repo_on_disk, call:pull, call:PullResponse, raise:HTTPException, func:push_repository(project_id: uuid.UUID, repo_id: uuid.UUID, branch, user_id, session) → PushResponse, call:_get_repo_on_disk, call:push, call:PushResponse, raise:HTTPException, func:merge_repository_branches(project_id: uuid.UUID, repo_id: uuid.UUID, data: MergeRequest, user_id, session) → MergeResponse, call:_get_repo_on_disk, call:merge, call:MergeResponse, raise:HTTPException | dep: logging, os, shutil, uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.schemas.project.git_repository, src.services.git.operations, src.utils.git_control, src.utils.git_files, src.utils.git_history, src.utils.git_url_parser +- projects.py | Implements FastAPI REST endpoints for CRUD operations on projects, including nested repository/workspace listing and filesystem cleanup on deletion. | exp: func:create_project(data: ProjectCreate, user_id, session) → Project, call:_get_user, call:Project, call:session.add, call:session.commit, call:session.refresh, func:list_projects(user_id, session) → list[dict], call:_get_user, call:session.execute, call:select(Project) .where(Project.owner_id == user.id) .order_by, call:Project.created_at.desc, call:result.scalars().all, call:select(GitRepository).where, call:repos_result.scalars().all, call:select(Workspace).where, call:ws_result.scalars().all, call:select(func.count()).where, call:func.count, call:inst_result.scalar, call:workspaces.append, call:str, call:repositories.append, call:enriched.append, call:project.created_at.isoformat, func:get_project(project_id: uuid.UUID, user_id, session) → Project, call:_get_user, call:_get_owned_project, func:update_project(project_id: uuid.UUID, data: ProjectUpdate, user_id, session) → Project, call:_get_user, call:_get_owned_project, call:session.commit, call:session.refresh, func:delete_project(project_id: uuid.UUID, user_id, session) → Response, call:_get_user, call:_get_owned_project, call:session.execute, call:select(GitRepository).where, call:result.scalars().all, call:os.path.exists, call:shutil.rmtree, call:session.delete, call:session.commit, call:Response, func:set_default_ssh_key(project_id: uuid.UUID, data: SetDefaultSSHKeyRequest, user_id, session) → Project, call:_get_user, call:_get_owned_project, call:session.get, call:session.commit, call:session.refresh, raise:HTTPException | dep: os, shutil, uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.models.project, src.schemas.project +## arch +Modular FastAPI router pattern with separate endpoint modules for distinct resource domains (projects vs. git repositories), using CRUD-based operations with filesystem integration and git CLI automation. +## tags +get, call:, repository, raise:httpexception, repo, on, disk, project +## symbols +- _get_repo +- _get_repo_on_disk +- _parse_remote_url +- _commit_author +- list_user_repositories +- parse_repository_url +- create_external_repository +- list_repositories +## workflows +- change project behavior + read: __init__.py, git_repositories.py, projects.py +## dirty +- diff --git a/apps/api/src/api/system/.pi-map.index.md b/apps/api/src/api/system/.pi-map.index.md new file mode 100644 index 0000000..64757ef --- /dev/null +++ b/apps/api/src/api/system/.pi-map.index.md @@ -0,0 +1,26 @@ +# apps/api/src/api/system (index) +dir: apps/api/src/api/system + +## role +Provides system-level API endpoints for monitoring, administration, and infrastructure interaction including dashboards, health checks, events, notifications, and container terminal access. +## parent +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## children +- +## files +- __init__.py +- dashboard.py +- events.py +- health.py +- instance_proxy.py +- notifications.py +- terminal.py +## links +index: apps/api/src/api/system/.pi-map.index.md +map: apps/api/src/api/system/.pi-map.md +## workflows +- change system behavior + read: __init__.py, dashboard.py, events.py +## dirty +- diff --git a/apps/api/src/api/system/.pi-map.md b/apps/api/src/api/system/.pi-map.md new file mode 100644 index 0000000..893f584 --- /dev/null +++ b/apps/api/src/api/system/.pi-map.md @@ -0,0 +1,33 @@ +# apps/api/src/api/system +dir: apps/api/src/api/system + +index: apps/api/src/api/system/.pi-map.index.md + +## role +Provides system-level API endpoints for monitoring, administration, and infrastructure interaction including dashboards, health checks, events, notifications, and container terminal access. +## files +- __init__.py | Aggregates and re-exports system API router modules from submodules for centralized access. | dep: src.api.system.dashboard, src.api.system.events, src.api.system.health, src.api.system.instance_proxy, src.api.system.notifications, src.api.system.terminal +- dashboard.py | Provides a FastAPI endpoint that returns a dashboard summary with aggregated counts of projects, repositories, SSH keys, and recent activity for the authenticated user. | exp: func:get_dashboard_summary(user_id, session) → dict, call:session.execute, call:select(func.count()).select_from(Project).where, call:func.count, call:projects_result.scalar, call:select(func.count()).select_from(GitRepository).where, call:repos_result.scalar, call:select(func.count()).select_from(SSHKey).where, call:ssh_keys_result.scalar, call:select(Project) .where(Project.owner_id == user_id) .order_by(Project.created_at.desc()) .limit, call:Project.created_at.desc, call:recent_projects.scalars().all | dep: uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.models.project, src.models (GitRepository, Project, SSHKey) +- events.py | Implements an SSE streaming endpoint that delivers instance events to authenticated users with per-user connection limits and keep-alive pings. | exp: func:events_stream(request: Request, user_id) → StreamingResponse, call:_connection_counts.get, call:InstanceEventBus, call:asyncio.Queue, call:queue.put_nowait, call:contextlib.suppress, call:queue.get_nowait, call:event_bus.subscribe, call:asyncio.wait_for, call:queue.get, call:json.dumps, call:unsubscribe, call:max, call:_connection_counts.pop, call:StreamingResponse, call:event_generator, raise:HTTPException, func:event_generator() → AsyncGenerator[str, None], call:InstanceEventBus, call:asyncio.Queue, call:queue.put_nowait, call:contextlib.suppress, call:queue.get_nowait, call:event_bus.subscribe, call:asyncio.wait_for, call:queue.get, call:json.dumps, call:unsubscribe, call:max, call:_connection_counts.get, call:_connection_counts.pop, func:on_event(payload: InstanceEventPayload) → None, call:queue.put_nowait, call:contextlib.suppress, call:queue.get_nowait | dep: asyncio, contextlib, json, uuid, collections.abc, fastapi, fastapi.responses, src.auth.dependencies, src.services.instance.event_bus +- health.py | Implements FastAPI health check endpoints for monitoring system status including database connectivity and disk space. | exp: func:health_check() → dict[str, Any], call:HealthChecks, call:time_module.perf_counter, call:SessionLocal, call:session.execute, call:text, call:DatabaseHealth, call:round, call:shutil.disk_usage, call:DiskHealth, call:HealthResponse( status=overall_status, timestamp=datetime.now(timezone.utc).isoformat().replace("+00:00", "Z"), version="0.1.0", checks=checks, uptime_seconds=round(time.time() - _start_time, 2), ).model_dump, call:datetime.now(timezone.utc).isoformat().replace, call:time.time, func:health_check_db() → dict[str, Any], call:time_module.perf_counter, call:SessionLocal, call:session.execute, call:text, call:DatabaseHealthResponse( status="healthy", response_time_ms=round(db_time, 2), ).model_dump, call:round, call:DatabaseHealthResponse( status="unhealthy", response_time_ms=0.0, ).model_dump | dep: time, datetime, typing, fastapi, sqlalchemy, src.database, src.schemas.system, shutil +- instance_proxy.py | Proxies HTTP requests from FastAPI endpoints to running containerized tool instances after verifying ownership and status. | exp: func:_proxy_request(request: Request, instance_id: uuid.UUID, path: str, user_id: uuid.UUID, session: AsyncSession) → Response, call:session.get, call:str, call:request.headers.items, call:key.lower, call:httpx.AsyncClient, call:request.body, call:client.request, call:logger.error, call:dict, call:response_headers.pop, call:Response, raise:HTTPException, func:proxy_to_instance(request: Request, instance_id: uuid.UUID, path, user_id, session) → Response, call:_proxy_request | dep: logging, uuid, httpx, fastapi, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models +- notifications.py | Defines FastAPI REST endpoints for managing user notifications (list, unread count, mark read, dismiss/clear) with support for muted categories from user config. | exp: class:NotificationItem, class:NotificationListResponse, class:UnreadCountResponse, class:MarkAllReadResponse, class:ClearAllResponse, func:_get_mute_categories(session: AsyncSession, user_id: uuid.UUID) → list[str], call:session.execute, call:select(UserConfig).where, call:result.scalar_one_or_none, call:config.config.get, call:isinstance, func:list_notifications(limit, offset, unread_only, user, session) → NotificationListResponse, call:_get_mute_categories, call:notification_service.list_notifications, call:NotificationListResponse, call:NotificationItem.model_validate, func:get_unread_count(user, session) → UnreadCountResponse, call:notification_service.get_unread_count, call:UnreadCountResponse, func:mark_notification_read(notification_id: uuid.UUID, user, session) → NotificationItem, call:notification_service.mark_read, call:NotificationItem.model_validate, raise:HTTPException, func:mark_all_read(user, session) → MarkAllReadResponse, call:notification_service.mark_all_read, call:MarkAllReadResponse, func:clear_all_notifications(user, session) → ClearAllResponse, call:notification_service.dismiss_all, call:ClearAllResponse, func:dismiss_notification(notification_id: uuid.UUID, user, session) → None, call:notification_service.dismiss, raise:HTTPException | dep: uuid, datetime, fastapi, pydantic, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models.user, src.models, src.services.shared.notification_service, sqlalchemy +- terminal.py | Provides WebSocket and HTTP endpoints for managing interactive terminal sessions attached to running Docker container tool instances, including session creation, attachment, input/output streaming, resize/reset control messages, and session listing. | exp: class:SessionRef, method:__init__(self, session, slot_session_id), func:terminal_websocket_default(websocket: WebSocket, instance_id: str, db_session) → None, call:_handle_terminal_websocket, func:terminal_websocket_specific(websocket: WebSocket, instance_id: str, session_id: str, db_session) → None, call:_handle_terminal_websocket, func:_handle_terminal_websocket(websocket: WebSocket, instance_id: str, target_session_id: str | None, db_session: AsyncSession) → None, call:logger.debug, call:websocket.accept, call:uuid.UUID, call:logger.error, call:websocket.close, call:_get_user_from_websocket, call:logger.warning, call:db_session.get, call:get_container_status, call:terminal_manager.get_or_create_session, call:terminal_manager.get_session, call:logger.info, call:terminal_manager.create_session, call:terminal_manager._find_key_by_internal_id, call:terminal_manager.attach_websocket, call:websocket.send_json, call:SessionRef, call:asyncio.create_task, call:_write_loop, call:_heartbeat_loop, call:asyncio.wait, call:len, call:task.cancel, call:str, call:suppress, call:terminal_manager.detach_websocket, func:_write_loop(session_ref: SessionRef, websocket, instance_id: str) → None, call:session.is_alive, call:asyncio.sleep, call:websocket.receive, call:session.write_input, call:text.startswith, call:json.loads, call:ctrl.get, call:logger.debug, call:session.resize, call:session.acknowledge_data, call:websocket.send_json, call:terminal_manager.reset_session, call:terminal_manager.attach_websocket, call:text.encode, func:_heartbeat_loop(websocket: WebSocket) → None, call:asyncio.sleep, call:websocket.send_json, func:_get_terminal_instance(instance_id: uuid.UUID, user_id: uuid.UUID, db_session: AsyncSession) → ToolInstance, call:db_session.get, raise:HTTPException, func:list_terminal_sessions(instance_id: uuid.UUID, user_id, db_session) → dict, call:_get_terminal_instance, call:db_session.execute, call:select(TerminalSessionModel) .where(TerminalSessionModel.instance_id == instance_id) .where(TerminalSessionModel.status != "closed") .order_by, call:TerminalSessionModel.created_at.asc, call:result.scalars().all, call:terminal_manager.get_session, call:str, call:sessions.append, call:live_session.has_websockets, call:row.created_at.isoformat, call:row.last_activity_at.isoformat, func:create_terminal_session(instance_id: uuid.UUID, data: dict, user_id, db_session) → dict, call:_get_terminal_instance, call:db_session.get, call:data.get, call:terminal_manager.create_session, raise:HTTPException, func:close_terminal_session(instance_id: uuid.UUID, session_id: str, user_id, db_session) → dict, call:_get_terminal_instance, call:terminal_manager._find_key_by_internal_id, call:str, call:terminal_manager.get_session, call:terminal_manager.close_session, raise:HTTPException, func:reset_specific_terminal_session(instance_id: uuid.UUID, session_id: str, user_id, db_session) → dict, call:_get_terminal_instance, call:terminal_manager._find_key_by_internal_id, call:str, call:terminal_manager.get_session, call:db_session.get, call:terminal_manager.reset_session, raise:HTTPException, func:rename_terminal_session(instance_id: uuid.UUID, session_id: str, data: dict, user_id, db_session) → dict, call:_get_terminal_instance, call:data.get, call:isinstance, call:terminal_manager.get_session, call:str, call:db_session.get, call:uuid.UUID, call:db_session.commit, raise:HTTPException, func:reset_terminal_session(instance_id: uuid.UUID, user_id, db_session) → dict, call:_get_terminal_instance, call:db_session.get, call:terminal_manager.reset_session, call:logger.info, call:str, call:logger.error, raise:HTTPException, func:_get_user_from_websocket(websocket: WebSocket, db_session: AsyncSession) → uuid.UUID | None, call:websocket.cookies.get, call:Settings, call:decode_session_cookie, call:uuid.UUID, call:str | dep: asyncio, json, logging, uuid, contextlib, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, starlette.websockets, src.auth.dependencies, src.models, src.services.terminal.terminal_manager, src.services.docker, src.auth.session, src.config, starlette +## arch +FastAPI modular router pattern with separate files per domain concern, combining REST endpoints, SSE streaming, WebSocket connections, and HTTP proxying; uses dependency injection for auth and integrates with Docker/container runtime for terminal and instance proxy features. +## tags +session, terminal, call:terminal, call:, src, get, response, websocket +## symbols +- NotificationItem +- NotificationListResponse +- UnreadCountResponse +- MarkAllReadResponse +- ClearAllResponse +- SessionRef +- get_dashboard_summary +- events_stream +## workflows +- change system behavior + read: __init__.py, dashboard.py, events.py +## dirty +- diff --git a/apps/api/src/api/tool/.pi-map.index.md b/apps/api/src/api/tool/.pi-map.index.md new file mode 100644 index 0000000..294c810 --- /dev/null +++ b/apps/api/src/api/tool/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/api/src/api/tool (index) +dir: apps/api/src/api/tool + +## role +Provides FastAPI REST endpoints for managing the complete lifecycle of containerized tools, including type definitions, instances, sessions, and validation. +## parent +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## children +- +## files +- __init__.py +- sessions.py +- tool_definitions.py +- tool_instances.py +- tool_types.py +- tool_types_validation.py +## links +index: apps/api/src/api/tool/.pi-map.index.md +map: apps/api/src/api/tool/.pi-map.md +## workflows +- change tool behavior + read: __init__.py, sessions.py, tool_definitions.py +## dirty +- diff --git a/apps/api/src/api/tool/.pi-map.md b/apps/api/src/api/tool/.pi-map.md new file mode 100644 index 0000000..56284ba --- /dev/null +++ b/apps/api/src/api/tool/.pi-map.md @@ -0,0 +1,32 @@ +# apps/api/src/api/tool +dir: apps/api/src/api/tool + +index: apps/api/src/api/tool/.pi-map.index.md + +## role +Provides FastAPI REST endpoints for managing the complete lifecycle of containerized tools, including type definitions, instances, sessions, and validation. +## files +- __init__.py | Aggregates and exports tool-related API routers from submodules for centralized access | dep: src.api.tool.sessions, src.api.tool.tool_definitions, src.api.tool.tool_instances, src.api.tool.tool_types +- sessions.py | Provides a FastAPI endpoint to retrieve all active tool sessions (running instances) for the currently authenticated user with related metadata. | exp: func:get_user_sessions(user_id, session) → dict, call:_get_user, call:session.execute, call:select(ToolInstance) .where(ToolInstance.owner_id == user_id) .where( ToolInstance.status.in_( ["running", "building", "pending", "stopped", "error"] ) ) .order_by, call:ToolInstance.status.in_, call:ToolInstance.created_at.desc, call:result.scalars().all, call:session.get, call:sessions.append, call:str, call:instance.created_at.isoformat | dep: uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models +- tool_definitions.py | FastAPI router providing CRUD endpoints and manifest compilation for tool definition manifests stored in a database. | exp: class:CreateToolDefinitionRequest, class:UpdateToolDefinitionRequest, func:create_tool_definition(data: CreateToolDefinitionRequest, user_id, session) → dict, call:uuid.UUID, call:session.get, call:session.execute, call:select(ToolDefinitionManifest).where, call:existing.scalar_one_or_none, call:ToolDefinitionManifest, call:session.add, call:session.commit, call:session.refresh, call:logger.info, call:str, call:definition.created_at.isoformat, raise:HTTPException, func:list_tool_definitions(user_id, session, include_bases) → dict, call:select, call:query.where, call:ToolDefinitionManifest.is_base.is_, call:session.execute, call:query.order_by, call:ToolDefinitionManifest.created_at.desc, call:result.scalars().all, call:str, call:d.created_at.isoformat, func:get_tool_definition(definition_id: uuid.UUID, user_id, session) → dict, call:session.get, call:str, call:definition.created_at.isoformat, call:definition.updated_at.isoformat, raise:HTTPException, func:update_tool_definition(definition_id: uuid.UUID, data: UpdateToolDefinitionRequest, user_id, session) → dict, call:session.get, call:session.commit, call:session.refresh, call:logger.info, call:str, call:definition.updated_at.isoformat, raise:HTTPException, func:delete_tool_definition(definition_id: uuid.UUID, user_id, session) → dict, call:session.get, call:session.execute, call:select(ToolType).where, call:result.scalars().all, call:", ".join, call:session.delete, call:session.commit, call:logger.info, call:str, raise:HTTPException, func:compile_tool_definition(definition_id: uuid.UUID, user_id, session) → dict, call:session.get, call:dict, call:resolve_base, call:deep_merge, call:compile_dockerfile, call:compile_entrypoint, call:compute_image_tag, call:compile_compose, call:session.commit, call:str, raise:HTTPException | dep: logging, uuid, fastapi, pydantic, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.services.build.manifest_compiler +- tool_instances.py | Defines FastAPI REST endpoints for managing Docker-based tool instances within projects, including CRUD operations, lifecycle control (start/stop/restart), logs, health checks, and tunnel management. | exp: func:create_instance(project_id: uuid.UUID, repo_id: uuid.UUID, data: CreateInstanceRequest, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:create_tool_instance, call:str, call:instance.created_at.isoformat, raise:HTTPException, func:list_instances(project_id: uuid.UUID, repo_id: uuid.UUID, user_id, session) → list[dict], call:_get_user, call:_get_owned_project, call:session.execute, call:select(ToolInstance) .where(ToolInstance.repository_id == repo_id) .where(ToolInstance.owner_id == user_id) .order_by, call:ToolInstance.created_at.desc, call:result.scalars().all, call:str, call:i.created_at.isoformat, func:get_instance(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:session.get, call:get_container_status, call:str, call:instance.created_at.isoformat, call:instance.last_started_at.isoformat, raise:HTTPException, func:rename_instance(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, data: dict, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:data.get("display_name", "").strip, call:rename_tool_instance, call:str, raise:HTTPException, func:start_instance(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, data, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:start_tool_instance, raise:HTTPException, func:stop_instance(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:stop_tool_instance, raise:HTTPException, func:restart_instance(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:restart_tool_instance, raise:HTTPException, func:delete_instance(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, force, user_id, session) → None, call:_get_user, call:_get_owned_project, call:delete_tool_instance, call:str, call:detail.lower, raise:HTTPException, func:get_instance_logs(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, tail, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:session.get, call:get_container_logs, raise:HTTPException, func:recreate_tunnel_endpoint(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:recreate_instance_tunnel, raise:HTTPException, func:check_instance_tunnel_health(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, user_id, session) → dict, call:_get_user, call:_get_owned_project, call:session.get, call:get_container_status, call:instance.probe_result.get, call:"\n".join, call:check_tunnel_health, call:tunnel_health.get, raise:HTTPException, func:get_instance_events(project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, limit, user_id, session) → list[dict], call:_get_user, call:_get_owned_project, call:session.get, call:session.execute, call:select(InstanceEvent) .where(InstanceEvent.instance_id == instance_id) .order_by(InstanceEvent.created_at.desc()) .limit, call:InstanceEvent.created_at.desc, call:result.scalars().all, call:str, call:row.created_at.isoformat, raise:HTTPException, func:proxy_to_instance(request: Request, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, path, user_id, session) → Response, call:session.get, call:str, call:dict, call:headers.pop, call:httpx.AsyncClient, call:request.body, call:client.request, call:logger.error, call:response_headers.pop, call:Response, raise:HTTPException | dep: logging, uuid, httpx, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.services.docker, src.services.shared.tunnel, src.schemas.tool, src.services.tool.instance_service +- tool_types.py | Defines FastAPI routes for CRUD operations and validation of Docker tool types with compose/dockerfile/manifest definitions. | exp: func:_require_admin(user: User) → None, func:create_tool_type(data: ToolTypeCreate, user_id, session) → ToolType, call:_get_user, call:_require_admin, call:session.scalar, call:select(ToolType).where, call:ToolType, call:session.add, call:session.commit, call:session.refresh, raise:HTTPException, func:list_tool_types(user_id, session) → list[ToolType], call:_get_user, call:session.execute, call:select(ToolType).order_by, call:list, call:result.scalars().all, func:get_tool_type(tool_type_id: uuid.UUID, user_id, session) → ToolType, call:_get_user, call:session.get, raise:HTTPException, func:update_tool_type(tool_type_id: uuid.UUID, data: ToolTypeUpdate, user_id, session) → ToolType, call:_get_user, call:_require_admin, call:session.get, call:data.model_dump, call:update_data.get, call:validate_compose_yaml, call:check_port_exposed, call:validate_required_variables, call:update_data.items, call:setattr, call:session.commit, call:session.refresh, raise:HTTPException, func:validate_tool_type_template(data: ToolTypeValidateRequest, user_id, session) → dict, call:_get_user, call:errors.append, call:validate_compose_yaml, call:str, call:data.dockerfile_template.strip().startswith, call:len, func:validate_tool_type(tool_type_id: uuid.UUID, user_id, session) → dict, call:_get_user, call:session.get, call:errors.append, call:validate_compose_yaml, call:str, call:tool_type.dockerfile_template.strip().startswith, call:len, raise:HTTPException, func:delete_tool_type(tool_type_id: uuid.UUID, user_id, session) → None, call:_get_user, call:_require_admin, call:session.get, call:session.delete, call:session.commit, raise:HTTPException | dep: uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.api.tool.tool_types_validation, src.auth.dependencies, src.models, src.models.user, src.schemas.tool +- tool_types_validation.py | Validates Docker Compose YAML templates by sanitizing template variables, parsing YAML, checking required structure, verifying port exposure, and ensuring required variables are present. | exp: func:sanitize_template_vars(template: str) → str, call:re.sub, func:validate_compose_yaml(template: str) → dict, call:sanitize_template_vars, call:yaml.safe_load, call:isinstance, raise:ValueError, func:check_port_exposed(parsed: dict, port: int) → bool, call:str, call:isinstance, call:parsed["services"].values, func:validate_required_variables(template: str, variables: list[str]) → None, raise:HTTPException | dep: re, yaml, fastapi, fastapi.HTTPException, fastapi.status +## arch +Modular router composition with domain-driven separation (types/instances/sessions/definitions), Docker-centric architecture using compose/dockerfile manifests, and validation-layer pattern for YAML sanitization and structural verification. +## tags +get, call:, tool, raise:httpexception, user, instance, call:str, call:session.get +## symbols +- CreateToolDefinitionRequest +- UpdateToolDefinitionRequest +- get_user_sessions +- create_tool_definition +- list_tool_definitions +- get_tool_definition +- update_tool_definition +- delete_tool_definition +## workflows +- change tool behavior + read: __init__.py, sessions.py, tool_definitions.py +## dirty +- diff --git a/apps/api/src/api/user/.pi-map.index.md b/apps/api/src/api/user/.pi-map.index.md new file mode 100644 index 0000000..c78ee20 --- /dev/null +++ b/apps/api/src/api/user/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/api/user (index) +dir: apps/api/src/api/user + +## role +Provides user-facing API endpoints for authentication, profile management, and SSH key operations in a FastAPI backend application. +## parent +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## children +- +## files +- __init__.py +- auth.py +- ssh_keys.py +- users.py +## links +index: apps/api/src/api/user/.pi-map.index.md +map: apps/api/src/api/user/.pi-map.md +## workflows +- change user behavior + read: __init__.py, auth.py, ssh_keys.py +## dirty +- diff --git a/apps/api/src/api/user/.pi-map.md b/apps/api/src/api/user/.pi-map.md new file mode 100644 index 0000000..71ce8dc --- /dev/null +++ b/apps/api/src/api/user/.pi-map.md @@ -0,0 +1,30 @@ +# apps/api/src/api/user +dir: apps/api/src/api/user + +index: apps/api/src/api/user/.pi-map.index.md + +## role +Provides user-facing API endpoints for authentication, profile management, and SSH key operations in a FastAPI backend application. +## files +- __init__.py | Aggregates and exports user-related API routers from submodules for easy importing | dep: src.api.user.auth, src.api.user.ssh_keys, src.api.user.users +- auth.py | Implements OAuth2/OIDC authentication endpoints for a FastAPI application using Authentik as the identity provider, including login initiation, callback handling, logout, and current user retrieval. | exp: func:get_db_session() → AsyncGenerator[AsyncSession, None], call:SessionLocal, func:login(next) → RedirectResponse, call:Settings, call:token_urlsafe, call:build_login_redirect_url, call:logger.debug, call:RedirectResponse, call:response.set_cookie, func:callback(code: str, state: str, auth_state, auth_next, session) → RedirectResponse, call:logger.debug, call:logger.warning, call:Settings, call:httpx.AsyncClient, call:exchange_code_for_tokens, call:logger.info, call:logger.error, call:fetch_user_info, call:str, call:user_info.get, call:session.scalar, call:select(User).where, call:User, call:session.add, call:session.commit, call:session.refresh, call:create_session_cookie, call:build_cookie_options, call:cast, call:bool, call:cookie_options.get, call:RedirectResponse, call:redirect_response.set_cookie, call:redirect_response.delete_cookie, raise:HTTPException, func:logout(response: Response) → dict[str, str], call:Settings, call:build_cookie_options, call:cast, call:bool, call:str, call:cookie_options.get, call:response.delete_cookie, func:me(session_cookie, session) → dict[str, Any], call:logger.debug, call:bool, call:logger.warning, call:Settings, call:decode_session_cookie, call:session.get, call:logger.info, call:str, raise:HTTPException | dep: logging, secrets, typing, httpx, fastapi, fastapi.responses, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.cookies, src.auth.oidc, src.auth.session, src.config, src.database, src.models.user +- ssh_keys.py | Implements a FastAPI router for managing Ed25519 SSH key pairs, including generation, storage with encrypted private keys, listing, deletion, and cryptographic signing/verification operations. | exp: func:_get_fernet() → Fernet, call:Settings, call:hashlib.sha256(settings.session_secret.encode()).digest, call:settings.session_secret.encode, call:base64.urlsafe_b64encode, call:Fernet, func:generate_ssh_key_pair() → tuple[str, str], call:Ed25519PrivateKey.generate, call:private_key.public_key, call:private_key.private_bytes, call:serialization.NoEncryption, call:public_key.public_bytes, call:private_bytes.decode, call:public_bytes.decode, func:create_ssh_key(data: SSHKeyCreate, user_id, session) → SSHKey, call:_get_user, call:generate_ssh_key_pair, call:_get_fernet, call:fernet.encrypt(private_key.encode()).decode, call:private_key.encode, call:SSHKey, call:session.add, call:session.commit, call:session.refresh, func:list_ssh_keys(user_id, session) → list[SSHKey], call:_get_user, call:session.execute, call:select(SSHKey).where, call:list, call:result.scalars().all, func:delete_ssh_key(key_id: uuid.UUID, user_id, session) → None, call:_get_user, call:session.get, call:session.delete, call:session.commit, raise:HTTPException, func:sign_payload(key_id: uuid.UUID, data: SignPayloadRequest, user_id, session) → SignatureResponse, call:_get_user, call:session.get, call:_get_fernet, call:fernet.decrypt(ssh_key.private_key_encrypted.encode()).decode, call:ssh_key.private_key_encrypted.encode, call:serialization.load_ssh_private_key, call:private_key_pem.encode, call:private_key.sign, call:data.payload.encode, call:SignatureResponse, call:base64.b64encode(signature).decode, raise:HTTPException, func:verify_signature(key_id: uuid.UUID, data: VerifySignatureRequest, user_id, session) → VerifySignatureResponse, call:_get_user, call:session.get, call:serialization.load_ssh_public_key, call:ssh_key.public_key.encode, call:base64.b64decode, call:public_key.verify, call:data.payload.encode, call:VerifySignatureResponse, raise:HTTPException | dep: base64, uuid, cryptography.fernet, cryptography.hazmat.primitives, cryptography.hazmat.primitives.asymmetric.ed25519, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.config, src.models, src.schemas.project, hashlib, cryptography +- users.py | Implements FastAPI endpoints for authenticated user profile management including retrieval, updates, and avatar uploads. | exp: func:get_profile(user_id, session) → User, call:_get_user, func:update_profile(data: UserProfileUpdate, user_id, session) → User, call:_get_user, call:len, call:data.name.strip, call:data.email.strip, call:session.commit, call:session.refresh, raise:HTTPException, func:upload_avatar(file: UploadFile, user_id, session) → User, call:_get_user, call:file.read, call:len, call:Path, call:old_path.exists, call:old_path.unlink, call:filename_part.split(".")[-1].lower, call:uuid.uuid4, call:file_path.write_bytes, call:session.commit, call:session.refresh, raise:HTTPException | dep: uuid, pathlib, fastapi, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models.user, src.schemas.user +## arch +Modular FastAPI router pattern with separate submodule files per domain concern (auth, SSH keys, users), aggregated via __init__.py, using OAuth2/OIDC external identity provider (Authentik) and encrypted key storage for cryptographic operations. +## tags +user, get, call:, key, ssh, src, cookie, raise:httpexception +## symbols +- get_db_session +- login +- callback +- logout +- me +- _get_fernet +- generate_ssh_key_pair +- create_ssh_key +## workflows +- change user behavior + read: __init__.py, auth.py, ssh_keys.py +## dirty +- diff --git a/apps/api/src/api/workspace/.pi-map.index.md b/apps/api/src/api/workspace/.pi-map.index.md new file mode 100644 index 0000000..63edc7c --- /dev/null +++ b/apps/api/src/api/workspace/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/api/workspace (index) +dir: apps/api/src/api/workspace + +## role +Provides FastAPI REST endpoints for workspace management, file operations, and git integration in user-scoped development environments. +## parent +index: apps/api/src/api/.pi-map.index.md +map: apps/api/src/api/.pi-map.md +## children +- +## files +- __init__.py +- workspace_files.py +- workspace_git.py +- workspace_instances.py +- workspaces.py +## links +index: apps/api/src/api/workspace/.pi-map.index.md +map: apps/api/src/api/workspace/.pi-map.md +## workflows +- change workspace behavior + read: __init__.py, workspace_files.py, workspace_git.py +## dirty +- diff --git a/apps/api/src/api/workspace/.pi-map.md b/apps/api/src/api/workspace/.pi-map.md new file mode 100644 index 0000000..eb2c38a --- /dev/null +++ b/apps/api/src/api/workspace/.pi-map.md @@ -0,0 +1,31 @@ +# apps/api/src/api/workspace +dir: apps/api/src/api/workspace + +index: apps/api/src/api/workspace/.pi-map.index.md + +## role +Provides FastAPI REST endpoints for workspace management, file operations, and git integration in user-scoped development environments. +## files +- __init__.py | Aggregates and re-exports workspace API router modules for centralized access | dep: src.api.workspace.workspace_files, src.api.workspace.workspace_git, src.api.workspace.workspace_instances, src.api.workspace.workspaces +- workspace_files.py | Provides FastAPI endpoints for listing, reading, and writing files within user workspaces with optional git commit integration. | exp: func:_get_workspace(session: AsyncSession, workspace_id: uuid.UUID, user_id: uuid.UUID) → Workspace, call:session.execute, call:select(Workspace).where, call:result.scalar_one_or_none, raise:HTTPException, func:list_files(workspace_id: uuid.UUID, path, user_id, session) → dict, call:_get_workspace, call:FileService, call:service.list_directory, raise:HTTPException, func:get_file_content(workspace_id: uuid.UUID, path: str, user_id, session) → dict, call:_get_workspace, call:FileService, call:service.read_file, raise:HTTPException, func:write_file(workspace_id: uuid.UUID, data: dict, user_id, session) → dict, call:_get_workspace, call:FileService, call:data.get("path", "").strip, call:data.get("message", "").strip, call:service.write_file, call:GitOperations, call:git.commit, raise:HTTPException | dep: uuid, fastapi, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.services.shared.file_service, sqlalchemy, src.services.git.git_operations +- workspace_git.py | Provides FastAPI REST endpoints for git operations (status, branches, commit, push, pull, fetch, checkout, history) scoped to user workspaces. | exp: func:_get_workspace(session: AsyncSession, workspace_id: uuid.UUID, user_id: uuid.UUID) → Workspace, call:session.execute, call:select(Workspace).where, call:result.scalar_one_or_none, raise:HTTPException, func:git_status(workspace_id: uuid.UUID, user_id, session) → dict, call:_get_workspace, call:GitOperations, call:git.status, raise:HTTPException, func:git_branches(workspace_id: uuid.UUID, user_id, session) → dict, call:_get_workspace, call:GitOperations, call:git.branches, raise:HTTPException, func:git_commit(workspace_id: uuid.UUID, data: dict, user_id, session) → dict, call:_get_workspace, call:data.get("message", "").strip, call:GitOperations, call:git.commit, raise:HTTPException, func:git_push(workspace_id: uuid.UUID, user_id, session) → dict, call:_get_workspace, call:GitOperations, call:git.push, raise:HTTPException, func:git_pull(workspace_id: uuid.UUID, user_id, session) → dict, call:_get_workspace, call:GitOperations, call:git.pull, raise:HTTPException, func:git_fetch(workspace_id: uuid.UUID, user_id, session) → dict, call:_get_workspace, call:GitOperations, call:git.fetch, raise:HTTPException, func:git_checkout(workspace_id: uuid.UUID, data: dict, user_id, session) → dict, call:_get_workspace, call:data.get("branch", "").strip, call:GitOperations, call:git.checkout, call:session.commit, raise:HTTPException, func:git_history(workspace_id: uuid.UUID, path, limit, user_id, session) → dict, call:_get_workspace, call:GitOperations, call:git.history, raise:HTTPException | dep: uuid, fastapi, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models, src.services.git.git_operations, sqlalchemy +- workspace_instances.py | Defines API endpoints for listing tool instances associated with a specific workspace, verifying workspace ownership. | exp: func:_get_workspace(session: AsyncSession, workspace_id: uuid.UUID, user_id: uuid.UUID) → Workspace, call:session.execute, call:select(Workspace).where, call:result.scalar_one_or_none, raise:HTTPException, func:list_workspace_instances(workspace_id: uuid.UUID, user_id, session) → list[dict], call:_get_workspace, call:session.execute, call:select(ToolInstance) .where(ToolInstance.workspace_id == workspace_id) .order_by, call:ToolInstance.created_at.desc, call:result.scalars().all, call:str, call:i.created_at.isoformat | dep: uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.dependencies, src.models +- workspaces.py | Provides FastAPI CRUD endpoints for managing Git repository workspaces with nested and top-level URL structures, including listing, creating, updating, deleting, and syncing workspaces with instance count tracking. | exp: func:list_all_workspaces(user_id, session) → list[dict], call:select(func.count(ToolInstance.id)) .where(ToolInstance.workspace_id == Workspace.id) .correlate(Workspace) .scalar_subquery, call:func.count, call:session.execute, call:select( Workspace, GitRepository.name.label("repo_name"), GitRepository.project_id, GitRepository.ssh_key_id.label("repo_ssh_key_id"), instance_count.label("instance_count"), ) .join(GitRepository, Workspace.repo_id == GitRepository.id) .where(Workspace.user_id == user_id) .order_by, call:GitRepository.name.label, call:GitRepository.ssh_key_id.label, call:instance_count.label, call:Workspace.created_at.desc, call:result.all, call:str, call:ws.last_sync_at.isoformat, call:ws.created_at.isoformat, call:ws.updated_at.isoformat, func:delete_workspace_top_level(workspace_id: uuid.UUID, force, user_id, session) → dict, call:session.get, call:WorkspaceManager, call:manager.delete, call:session.commit, call:session.rollback, call:logger.error, raise:HTTPException, func:create_workspace_top_level(data: dict, user_id, session) → dict, call:data.get("repo_id", "").strip, call:uuid.UUID, call:session.get, call:data.get("name", "").strip, call:data.get("branch", "main").strip, call:WorkspaceManager, call:manager.create, call:session.add, call:session.commit, call:session.rollback, call:logger.error, call:session.refresh, call:str, call:workspace.created_at.isoformat, raise:HTTPException, func:list_workspaces(project_id: uuid.UUID, repo_id: uuid.UUID, user_id, session) → list[dict], call:_get_repo, call:select(func.count(ToolInstance.id)) .where(ToolInstance.workspace_id == Workspace.id) .correlate(Workspace) .scalar_subquery, call:func.count, call:session.execute, call:select( Workspace, instance_count.label("instance_count"), ) .where(Workspace.repo_id == repo_id) .order_by, call:instance_count.label, call:Workspace.created_at.desc, call:result.all, call:str, call:ws.last_sync_at.isoformat, call:ws.created_at.isoformat, call:ws.updated_at.isoformat, func:create_workspace(project_id: uuid.UUID, repo_id: uuid.UUID, data: dict, user_id, session) → dict, call:_get_repo, call:data.get("name", "").strip, call:data.get("branch", "main").strip, call:WorkspaceManager, call:manager.create, call:session.add, call:session.commit, call:session.rollback, call:logger.error, call:session.refresh, call:str, call:workspace.created_at.isoformat, raise:HTTPException, func:get_workspace_detail(project_id: uuid.UUID, repo_id: uuid.UUID, workspace_id: uuid.UUID, user_id, session) → dict, call:_get_repo, call:_get_workspace, call:session.execute, call:select(func.count(ToolInstance.id)).where, call:func.count, call:result.scalar, call:str, call:workspace.last_sync_at.isoformat, call:workspace.created_at.isoformat, call:workspace.updated_at.isoformat, func:update_workspace(project_id: uuid.UUID, repo_id: uuid.UUID, workspace_id: uuid.UUID, data: dict, user_id, session) → dict, call:_get_repo, call:_get_workspace, call:data.get("name", "").strip, call:data.get("branch", "").strip, call:session.commit, call:session.rollback, call:logger.error, call:str, raise:HTTPException, func:delete_workspace(project_id: uuid.UUID, repo_id: uuid.UUID, workspace_id: uuid.UUID, force, user_id, session) → dict, call:_get_repo, call:_get_workspace, call:WorkspaceManager, call:manager.delete, call:session.commit, call:session.rollback, call:logger.error, raise:HTTPException, func:sync_workspace(project_id: uuid.UUID, repo_id: uuid.UUID, workspace_id: uuid.UUID, user_id, session) → dict, call:_get_repo, call:_get_workspace, call:WorkspaceManager, call:manager.sync, call:session.commit, call:workspace.last_sync_at.isoformat, raise:HTTPException, func:_get_repo(session: AsyncSession, repo_id: uuid.UUID, project_id: uuid.UUID, user_id: uuid.UUID) → GitRepository, call:session.execute, call:select(GitRepository) .where( GitRepository.id == repo_id, GitRepository.project_id == project_id, ) .options, call:selectinload, call:result.scalar_one_or_none, raise:HTTPException, func:_get_workspace(session: AsyncSession, workspace_id: uuid.UUID, repo_id: uuid.UUID) → Workspace, call:session.execute, call:select(Workspace).where, call:result.scalar_one_or_none, raise:HTTPException | dep: logging, uuid, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, sqlalchemy.orm, src.auth.dependencies, src.models, src.services.shared.workspace_manager +## arch +Modular router composition with domain-separated endpoint modules (files, git, instances, workspaces) using FastAPI dependency injection for workspace ownership verification and nested resource URL patterns. +## tags +workspace, get, raise:httpexception, call:, at.isoformat, git, call:select, call:data.get +## symbols +- _get_workspace +- list_files +- get_file_content +- write_file +- git_status +- git_branches +- git_commit +- git_push +## workflows +- change workspace behavior + read: __init__.py, workspace_files.py, workspace_git.py +## dirty +- diff --git a/apps/api/src/auth/.pi-map.index.md b/apps/api/src/auth/.pi-map.index.md new file mode 100644 index 0000000..b0a7874 --- /dev/null +++ b/apps/api/src/auth/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/auth (index) +dir: apps/api/src/auth + +## role +Provides authentication and authorization infrastructure for the API, including OIDC/OAuth2 integration, session management, and FastAPI dependency injection. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- +## files +- __init__.py +- cookies.py +- dependencies.py +- oidc.py +- session.py +## links +index: apps/api/src/auth/.pi-map.index.md +map: apps/api/src/auth/.pi-map.md +## workflows +- change auth behavior + read: __init__.py, cookies.py, dependencies.py +## dirty +- diff --git a/apps/api/src/auth/.pi-map.md b/apps/api/src/auth/.pi-map.md new file mode 100644 index 0000000..cfd440d --- /dev/null +++ b/apps/api/src/auth/.pi-map.md @@ -0,0 +1,31 @@ +# apps/api/src/auth +dir: apps/api/src/auth + +index: apps/api/src/auth/.pi-map.index.md + +## role +Provides authentication and authorization infrastructure for the API, including OIDC/OAuth2 integration, session management, and FastAPI dependency injection. +## files +- __init__.py | Re-exports authentication utility functions from submodules to provide a unified public API for the auth package | dep: src.auth.cookies, src.auth.oidc, src.auth.session +- cookies.py | Builds a dictionary of HTTP cookie options from application settings for secure cookie configuration. | exp: func:build_cookie_options(settings: Settings) → dict[str, str | bool | None] | dep: src.config, src.config.Settings +- dependencies.py | Provides FastAPI dependency functions for database sessions, user authentication, and project authorization. | exp: func:get_db_session(), call:SessionLocal, func:get_current_user_id(session_cookie) → uuid.UUID, call:Settings, call:decode_session_cookie, call:uuid.UUID, call:str, raise:HTTPException, func:get_current_user(session_cookie, db_session) → User, call:Settings, call:decode_session_cookie, call:uuid.UUID, call:str, call:db_session.get, raise:HTTPException, func:_get_user(session: AsyncSession, user_id: uuid.UUID) → User, call:session.get, raise:HTTPException, func:_get_owned_project(project_id: uuid.UUID, user_id: uuid.UUID, session: AsyncSession) → "Project", call:session.get, raise:HTTPException | dep: uuid, typing, fastapi, sqlalchemy.ext.asyncio, src.auth.session, src.config, src.database, src.models.project, src.models.user, sqlalchemy +- oidc.py | Implements OIDC/OAuth2 authentication flow with Authentik, including login URL construction, authorization code exchange for tokens, and user info retrieval. | exp: func:build_login_redirect_url(settings: Settings, redirect_uri: str, state: str) → str, call:urlencode, func:exchange_code_for_tokens(settings: Settings, code: str, redirect_uri: str, client: httpx.AsyncClient) → dict[str, str], call:client.post, call:response.raise_for_status, call:response.json, call:payload.get, func:fetch_user_info(settings: Settings, access_token: str, client: httpx.AsyncClient) → dict[str, Any], call:client.get, call:response.raise_for_status, call:response.json | dep: typing, urllib.parse, httpx, src.config +- session.py | Implements creation and verification of signed session cookies using HMAC-SHA256 in a JWS-like format. | exp: func:_base64url_encode(data: bytes) → str, call:base64.urlsafe_b64encode(data).rstrip(b"=").decode, func:_base64url_decode(data: str) → bytes, call:len, call:base64.urlsafe_b64decode, func:create_session_cookie(settings: Settings, user_id: str) → str, call:int, call:(datetime.now(timezone.utc) + timedelta(hours=settings.session_ttl_hours)).timestamp, call:datetime.now, call:timedelta, call:_base64url_encode, call:json.dumps({"alg": "HS256", "typ": "session"}).encode, call:json.dumps(payload).encode, call:hmac.new( settings.session_secret.encode(), message.encode(), hashlib.sha256, ).digest, call:settings.session_secret.encode, call:message.encode, func:decode_session_cookie(settings: Settings, cookie_value: str) → dict[str, Any], call:cookie_value.split, call:len, call:hmac.new( settings.session_secret.encode(), message.encode(), hashlib.sha256, ).digest, call:settings.session_secret.encode, call:message.encode, call:_base64url_encode, call:hmac.compare_digest, call:_base64url_decode, call:json.loads, call:payload.get, call:int, call:datetime.now(timezone.utc).timestamp, raise:ValueError | dep: hmac, hashlib, json, base64, datetime, typing, src.config, src.config.Settings +## arch +Modular utility package with separation of concerns across cookies, sessions, OIDC flows, and FastAPI dependencies; uses HMAC-SHA256 JWS-like tokens and external Authentik identity provider. +## tags +session, src, cookie, user, get, base64url, raise:httpexception, call: +## symbols +- build_cookie_options +- get_db_session +- get_current_user_id +- get_current_user +- _get_user +- _get_owned_project +- build_login_redirect_url +- exchange_code_for_tokens +## workflows +- change auth behavior + read: __init__.py, cookies.py, dependencies.py +## dirty +- diff --git a/apps/api/src/models/.pi-map.index.md b/apps/api/src/models/.pi-map.index.md new file mode 100644 index 0000000..eaa8c78 --- /dev/null +++ b/apps/api/src/models/.pi-map.index.md @@ -0,0 +1,37 @@ +# apps/api/src/models (index) +dir: apps/api/src/models + +## role +Provides the core database model layer with a centralized public API, defining SQLAlchemy base classes and reusable mixins for consistent schema patterns across the API application. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- apps/api/src/models/config + index: apps/api/src/models/config/.pi-map.index.md + map: apps/api/src/models/config/.pi-map.md +- apps/api/src/models/project + index: apps/api/src/models/project/.pi-map.index.md + map: apps/api/src/models/project/.pi-map.md +- apps/api/src/models/system + index: apps/api/src/models/system/.pi-map.index.md + map: apps/api/src/models/system/.pi-map.md +- apps/api/src/models/tool + index: apps/api/src/models/tool/.pi-map.index.md + map: apps/api/src/models/tool/.pi-map.md +- apps/api/src/models/user + index: apps/api/src/models/user/.pi-map.index.md + map: apps/api/src/models/user/.pi-map.md +## files +- __init__.py +- base.py +## links +index: apps/api/src/models/.pi-map.index.md +map: apps/api/src/models/.pi-map.md +## workflows +- change models behavior + read: __init__.py, base.py +- explore models subdirectories + index: apps/api/src/models/config/.pi-map.index.md, apps/api/src/models/project/.pi-map.index.md, apps/api/src/models/system/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/models/.pi-map.md b/apps/api/src/models/.pi-map.md new file mode 100644 index 0000000..321dc6a --- /dev/null +++ b/apps/api/src/models/.pi-map.md @@ -0,0 +1,25 @@ +# apps/api/src/models +dir: apps/api/src/models + +index: apps/api/src/models/.pi-map.index.md + +## role +Provides the core database model layer with a centralized public API, defining SQLAlchemy base classes and reusable mixins for consistent schema patterns across the API application. +## files +- __init__.py | Re-exports model classes from submodules to provide a centralized public API for the src.models package | dep: src.models.base, src.models.config.config_profile, src.models.project.git_repository, src.models.project.project, src.models.project.workspace, src.models.system.health_check, src.models.system.instance_event, src.models.system.notification, src.models.system.terminal_session, src.models.tool.tool_definition_manifest, src.models.tool.tool_instance, src.models.tool.tool_type, src.models.user.ssh_key, src.models.user.user, src.models.user.user_config +- base.py | Defines SQLAlchemy base model and reusable mixins for UUID primary keys and automatic timestamp tracking in database models. | exp: class:Base, class:UUIDPrimaryKeyMixin, class:TimestampMixin | dep: uuid, datetime, sqlalchemy, sqlalchemy.orm +## arch +Uses the declarative base pattern with mixin composition for cross-cutting concerns (UUIDs, timestamps), and a facade/aggregate module pattern via __init__.py re-exports to simplify imports for consumers. +## tags +models, src, base, project, system, user, mixin, tool +## symbols +- Base +- UUIDPrimaryKeyMixin +- TimestampMixin +## workflows +- change models behavior + read: __init__.py, base.py +- explore models subdirectories + index: apps/api/src/models/config/.pi-map.index.md, apps/api/src/models/project/.pi-map.index.md, apps/api/src/models/system/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/models/config/.pi-map.index.md b/apps/api/src/models/config/.pi-map.index.md new file mode 100644 index 0000000..0f54717 --- /dev/null +++ b/apps/api/src/models/config/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/models/config (index) +dir: apps/api/src/models/config + +## role +Provides SQLAlchemy ORM models for managing configuration profiles and their hierarchical includes in the API application. +## parent +index: apps/api/src/models/.pi-map.index.md +map: apps/api/src/models/.pi-map.md +## children +- +## files +- __init__.py +- config_profile.py +## links +index: apps/api/src/models/config/.pi-map.index.md +map: apps/api/src/models/config/.pi-map.md +## workflows +- change config behavior + read: __init__.py, config_profile.py +- change config config + read: config_profile.py +## dirty +- diff --git a/apps/api/src/models/config/.pi-map.md b/apps/api/src/models/config/.pi-map.md new file mode 100644 index 0000000..71ed878 --- /dev/null +++ b/apps/api/src/models/config/.pi-map.md @@ -0,0 +1,24 @@ +# apps/api/src/models/config +dir: apps/api/src/models/config + +index: apps/api/src/models/config/.pi-map.index.md + +## role +Provides SQLAlchemy ORM models for managing configuration profiles and their hierarchical includes in the API application. +## files +- __init__.py | Exports config model classes from a subpackage for simplified importing | dep: src.models.config.config_profile +- config_profile.py | Defines SQLAlchemy ORM models for configuration profiles and their includes, storing environment variables, runtime hints, mounts, files, and git mounts with user/project/tool associations and self-referential inclusion relationships. | exp: class:ConfigProfile, class:ConfigProfileInclude | dep: uuid, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.project, src.models, src.models.user, src.models (ToolType) +## arch +Uses SQLAlchemy declarative ORM pattern with self-referential many-to-many relationships for profile inclusion, and associations to users, projects, and tools. +## tags +config, src, models, profile, sqlalchemy, init, orm, mounts +## symbols +- ConfigProfile +- ConfigProfileInclude +## workflows +- change config behavior + read: __init__.py, config_profile.py +- change config config + read: config_profile.py +## dirty +- diff --git a/apps/api/src/models/project/.pi-map.index.md b/apps/api/src/models/project/.pi-map.index.md new file mode 100644 index 0000000..1bb8e2a --- /dev/null +++ b/apps/api/src/models/project/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/models/project (index) +dir: apps/api/src/models/project + +## role +Defines the core data models for project-related entities (GitRepository, Project, Workspace) using SQLAlchemy ORM. +## parent +index: apps/api/src/models/.pi-map.index.md +map: apps/api/src/models/.pi-map.md +## children +- +## files +- __init__.py +- git_repository.py +- project.py +- workspace.py +## links +index: apps/api/src/models/project/.pi-map.index.md +map: apps/api/src/models/project/.pi-map.md +## workflows +- change project behavior + read: __init__.py, git_repository.py, project.py +## dirty +- diff --git a/apps/api/src/models/project/.pi-map.md b/apps/api/src/models/project/.pi-map.md new file mode 100644 index 0000000..dc69df7 --- /dev/null +++ b/apps/api/src/models/project/.pi-map.md @@ -0,0 +1,25 @@ +# apps/api/src/models/project +dir: apps/api/src/models/project + +index: apps/api/src/models/project/.pi-map.index.md + +## role +Defines the core data models for project-related entities (GitRepository, Project, Workspace) using SQLAlchemy ORM. +## files +- __init__.py | Exports the three main project model classes (GitRepository, Project, Workspace) as the public API for the models.project package. | dep: src.models.project.git_repository, src.models.project.project, src.models.project.workspace +- git_repository.py | Defines a SQLAlchemy ORM model for Git repositories with relationships to projects, users, and SSH keys. | exp: class:GitRepository | dep: uuid, datetime, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.project, src.models, src.models.user, src.models.ssh_key +- project.py | Defines a SQLAlchemy ORM model for a Project entity with relationships to users, Git repositories, and SSH keys. | exp: class:Project | dep: uuid, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models, src.models.user, src.models.GitRepository, src.models.SSHKey, src.models.user.User +- workspace.py | Defines a SQLAlchemy ORM model for persistent writable Git repository clones associated with users. | exp: class:Workspace | dep: uuid, datetime, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models, src.models.user, src.models.GitRepository, src.models.user.User +## arch +Standard SQLAlchemy ORM pattern with declarative models, package-level public API abstraction via __init__.py, and bidirectional relationships between entities. +## tags +models, src, project, sqlalchemy, git, user, workspace, orm +## symbols +- GitRepository +- Project +- Workspace +## workflows +- change project behavior + read: __init__.py, git_repository.py, project.py +## dirty +- diff --git a/apps/api/src/models/system/.pi-map.index.md b/apps/api/src/models/system/.pi-map.index.md new file mode 100644 index 0000000..02160f0 --- /dev/null +++ b/apps/api/src/models/system/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/models/system (index) +dir: apps/api/src/models/system + +## role +Provides SQLAlchemy ORM models for system-level operational and audit data including health checks, instance events, notifications, and terminal sessions. +## parent +index: apps/api/src/models/.pi-map.index.md +map: apps/api/src/models/.pi-map.md +## children +- +## files +- __init__.py +- health_check.py +- instance_event.py +- notification.py +- terminal_session.py +## links +index: apps/api/src/models/system/.pi-map.index.md +map: apps/api/src/models/system/.pi-map.md +## workflows +- change system behavior + read: __init__.py, health_check.py, instance_event.py +## dirty +- diff --git a/apps/api/src/models/system/.pi-map.md b/apps/api/src/models/system/.pi-map.md new file mode 100644 index 0000000..dd4d427 --- /dev/null +++ b/apps/api/src/models/system/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/src/models/system +dir: apps/api/src/models/system + +index: apps/api/src/models/system/.pi-map.index.md + +## role +Provides SQLAlchemy ORM models for system-level operational and audit data including health checks, instance events, notifications, and terminal sessions. +## files +- __init__.py | Exports system-related model classes from a package for convenient importing. | dep: src.models.system.health_check, src.models.system.instance_event, src.models.system.notification, src.models.system.terminal_session +- health_check.py | Defines a SQLAlchemy ORM model for storing health check snapshots of tool instances with various status and probe fields. | exp: class:HealthCheck | dep: uuid, datetime, sqlalchemy, sqlalchemy.orm, src.models.base +- instance_event.py | Defines a SQLAlchemy ORM model for auditing instance lifecycle events with metadata, status tracking, and user attribution. | exp: class:InstanceEvent | dep: uuid, datetime, typing, sqlalchemy, sqlalchemy.orm, src.models.base +- notification.py | Defines a SQLAlchemy ORM model for storing user notifications with metadata, read/dismissed tracking, and polymorphic source references. | exp: class:Notification | dep: datetime, typing, uuid, sqlalchemy, sqlalchemy.orm, sqlalchemy.sql, src.models.base +- terminal_session.py | Defines a SQLAlchemy database model for storing terminal session metadata with lifecycle tracking. | exp: class:TerminalSessionModel | dep: uuid, datetime, sqlalchemy, sqlalchemy.orm, src.models.base +## arch +Standard SQLAlchemy declarative ORM pattern with timestamped base models, polymorphic relationships (notification sources), lifecycle state tracking, and audit fields (user attribution, status enums). +## tags +sqlalchemy, src, models, model, orm, system, notification, health +## symbols +- HealthCheck +- InstanceEvent +- Notification +- TerminalSessionModel +## workflows +- change system behavior + read: __init__.py, health_check.py, instance_event.py +## dirty +- diff --git a/apps/api/src/models/tool/.pi-map.index.md b/apps/api/src/models/tool/.pi-map.index.md new file mode 100644 index 0000000..30c76e0 --- /dev/null +++ b/apps/api/src/models/tool/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/models/tool (index) +dir: apps/api/src/models/tool + +## role +Defines SQLAlchemy ORM models for managing tool definitions, instances, and types in a container-based deployment system. +## parent +index: apps/api/src/models/.pi-map.index.md +map: apps/api/src/models/.pi-map.md +## children +- +## files +- __init__.py +- tool_definition_manifest.py +- tool_instance.py +- tool_type.py +## links +index: apps/api/src/models/tool/.pi-map.index.md +map: apps/api/src/models/tool/.pi-map.md +## workflows +- change tool behavior + read: __init__.py, tool_definition_manifest.py, tool_instance.py +## dirty +- diff --git a/apps/api/src/models/tool/.pi-map.md b/apps/api/src/models/tool/.pi-map.md new file mode 100644 index 0000000..9a4e3b4 --- /dev/null +++ b/apps/api/src/models/tool/.pi-map.md @@ -0,0 +1,25 @@ +# apps/api/src/models/tool +dir: apps/api/src/models/tool + +index: apps/api/src/models/tool/.pi-map.index.md + +## role +Defines SQLAlchemy ORM models for managing tool definitions, instances, and types in a container-based deployment system. +## files +- __init__.py | Exports the public API for the tool models module by re-exporting three key classes. | dep: src.models.tool.tool_definition_manifest, src.models.tool.tool_instance, src.models.tool.tool_type +- tool_definition_manifest.py | Defines a SQLAlchemy ORM model for storing tool definition manifests that compile to Dockerfiles and Compose files, supporting both base definitions and tool-specific definitions with inheritance. | exp: class:ToolDefinitionManifest | dep: uuid, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.user +- tool_instance.py | Defines a SQLAlchemy ORM model for tool instances that represent deployed tools with container/runtime metadata and relationships to users, projects, repositories, and workspaces. | exp: class:ToolInstance | dep: uuid, datetime, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models, src.models.project, src.models.user, src.models (ConfigProfile, GitRepository, Project, ToolType, User, Workspace) +- tool_type.py | Defines a SQLAlchemy ORM model for tool types that represent configurable categories of tools with deployment templates, manifest references, and metadata. | exp: class:ToolType | dep: uuid, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.tool.tool_definition_manifest, src.models.user +## arch +Domain-driven SQLAlchemy ORM models with inheritance patterns (base/tool-specific manifests), rich relationships (users, projects, repositories, workspaces), and template-based deployment abstractions. +## tags +tool, models, src, sqlalchemy, orm, definition, manifest, base +## symbols +- ToolDefinitionManifest +- ToolInstance +- ToolType +## workflows +- change tool behavior + read: __init__.py, tool_definition_manifest.py, tool_instance.py +## dirty +- diff --git a/apps/api/src/models/user/.pi-map.index.md b/apps/api/src/models/user/.pi-map.index.md new file mode 100644 index 0000000..5897971 --- /dev/null +++ b/apps/api/src/models/user/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/api/src/models/user (index) +dir: apps/api/src/models/user + +## role +Provides the core data models for user identity, authentication credentials, and personal configuration in the API's database layer. +## parent +index: apps/api/src/models/.pi-map.index.md +map: apps/api/src/models/.pi-map.md +## children +- +## files +- __init__.py +- ssh_key.py +- user.py +- user_config.py +## links +index: apps/api/src/models/user/.pi-map.index.md +map: apps/api/src/models/user/.pi-map.md +## workflows +- change user behavior + read: __init__.py, ssh_key.py, user.py +- change user config + read: user_config.py +## dirty +- diff --git a/apps/api/src/models/user/.pi-map.md b/apps/api/src/models/user/.pi-map.md new file mode 100644 index 0000000..5230384 --- /dev/null +++ b/apps/api/src/models/user/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/src/models/user +dir: apps/api/src/models/user + +index: apps/api/src/models/user/.pi-map.index.md + +## role +Provides the core data models for user identity, authentication credentials, and personal configuration in the API's database layer. +## files +- __init__.py | Exports the user-related model classes (SSHKey, User, UserConfig) from a package for convenient importing. | dep: src.models.user.ssh_key, src.models.user.user, src.models.user.user_config +- ssh_key.py | Defines an SSHKey SQLAlchemy ORM model for storing encrypted SSH key pairs with user and optional project associations. | exp: class:SSHKey | dep: uuid, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.project, src.models.user +- user.py | Defines a SQLAlchemy ORM model for a User entity with authentication fields and relationships to projects, SSH keys, and user configuration. | exp: class:User | dep: typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.project, src.models, src.models.SSHKey, src.models.UserConfig +- user_config.py | Defines a SQLAlchemy model for storing per-user JSON configuration with typed property accessors for default profile IDs. | exp: class:UserConfig | dep: uuid, typing, sqlalchemy, sqlalchemy.orm, src.models.base, src.models.user +## arch +Follows SQLAlchemy ORM declarative model pattern with package-level aggregation via __init__.py, using explicit table relationships (foreign keys, one-to-many associations) and a JSON-backed configuration store with typed property accessors. +## tags +user, src, models, sqlalchemy, sshkey, orm, model, ssh +## symbols +- SSHKey +- User +- UserConfig +## workflows +- change user behavior + read: __init__.py, ssh_key.py, user.py +- change user config + read: user_config.py +## dirty +- diff --git a/apps/api/src/schemas/.pi-map.index.md b/apps/api/src/schemas/.pi-map.index.md new file mode 100644 index 0000000..d23854a --- /dev/null +++ b/apps/api/src/schemas/.pi-map.index.md @@ -0,0 +1,36 @@ +# apps/api/src/schemas (index) +dir: apps/api/src/schemas + +## role +Defines Pydantic schemas for data validation, serialization, and API request/response models in the FastAPI application. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- apps/api/src/schemas/config + index: apps/api/src/schemas/config/.pi-map.index.md + map: apps/api/src/schemas/config/.pi-map.md +- apps/api/src/schemas/project + index: apps/api/src/schemas/project/.pi-map.index.md + map: apps/api/src/schemas/project/.pi-map.md +- apps/api/src/schemas/system + index: apps/api/src/schemas/system/.pi-map.index.md + map: apps/api/src/schemas/system/.pi-map.md +- apps/api/src/schemas/tool + index: apps/api/src/schemas/tool/.pi-map.index.md + map: apps/api/src/schemas/tool/.pi-map.md +- apps/api/src/schemas/user + index: apps/api/src/schemas/user/.pi-map.index.md + map: apps/api/src/schemas/user/.pi-map.md +## files +- __init__.py +## links +index: apps/api/src/schemas/.pi-map.index.md +map: apps/api/src/schemas/.pi-map.md +## workflows +- change schemas behavior + read: __init__.py +- explore schemas subdirectories + index: apps/api/src/schemas/config/.pi-map.index.md, apps/api/src/schemas/project/.pi-map.index.md, apps/api/src/schemas/system/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/schemas/.pi-map.md b/apps/api/src/schemas/.pi-map.md new file mode 100644 index 0000000..6401026 --- /dev/null +++ b/apps/api/src/schemas/.pi-map.md @@ -0,0 +1,22 @@ +# apps/api/src/schemas +dir: apps/api/src/schemas + +index: apps/api/src/schemas/.pi-map.index.md + +## role +Defines Pydantic schemas for data validation, serialization, and API request/response models in the FastAPI application. +## files +- __init__.py | Empty file with no functionality +## arch +Modular schema organization following FastAPI/Pydantic patterns, with empty __init__.py indicating package initialization for future schema modules. +## tags +init, empty, functionality +## symbols +- +## workflows +- change schemas behavior + read: __init__.py +- explore schemas subdirectories + index: apps/api/src/schemas/config/.pi-map.index.md, apps/api/src/schemas/project/.pi-map.index.md, apps/api/src/schemas/system/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/schemas/config/.pi-map.index.md b/apps/api/src/schemas/config/.pi-map.index.md new file mode 100644 index 0000000..22234ed --- /dev/null +++ b/apps/api/src/schemas/config/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/schemas/config (index) +dir: apps/api/src/schemas/config + +## role +Provides Pydantic validation schemas for configuration profile API endpoints, ensuring data integrity for mounts, git URLs, UUIDs, and file paths. +## parent +index: apps/api/src/schemas/.pi-map.index.md +map: apps/api/src/schemas/.pi-map.md +## children +- +## files +- __init__.py +- config_profile.py +## links +index: apps/api/src/schemas/config/.pi-map.index.md +map: apps/api/src/schemas/config/.pi-map.md +## workflows +- change config behavior + read: __init__.py, config_profile.py +- change config config + read: config_profile.py +## dirty +- diff --git a/apps/api/src/schemas/config/.pi-map.md b/apps/api/src/schemas/config/.pi-map.md new file mode 100644 index 0000000..8ac5849 --- /dev/null +++ b/apps/api/src/schemas/config/.pi-map.md @@ -0,0 +1,30 @@ +# apps/api/src/schemas/config +dir: apps/api/src/schemas/config + +index: apps/api/src/schemas/config/.pi-map.index.md + +## role +Provides Pydantic validation schemas for configuration profile API endpoints, ensuring data integrity for mounts, git URLs, UUIDs, and file paths. +## files +- __init__.py | Re-exports Pydantic schemas for configuration profile operations from a submodule to provide a clean public API. | dep: src.schemas.config.config_profile +- config_profile.py | Defines Pydantic request/response schemas for config profile API operations with validation for mounts, git URLs, UUIDs, and file paths. | exp: class:GitMountMapping, class:GitMountItem, class:MountItem, class:ConfigProfileCreate, class:ConfigProfileUpdate, class:ConfigProfileIncludeUpdate, class:ConfigProfileResponse, class:DefaultProfilesUpdate, class:ValidateGitUrlRequest, class:ValidateGitUrlResponse, func:_validate_uuid(v: str | None) → str | None, call:uuid.UUID, raise:ValueError | dep: uuid, pydantic, src.api.shared_validators +## arch +Simple schema-as-code pattern using Pydantic models with field validators; clean public API via explicit re-exports in `__init__.py`. +## tags +profile, config, git, mount, update, validate, response, item +## symbols +- GitMountMapping +- GitMountItem +- MountItem +- ConfigProfileCreate +- ConfigProfileUpdate +- ConfigProfileIncludeUpdate +- ConfigProfileResponse +- DefaultProfilesUpdate +## workflows +- change config behavior + read: __init__.py, config_profile.py +- change config config + read: config_profile.py +## dirty +- diff --git a/apps/api/src/schemas/project/.pi-map.index.md b/apps/api/src/schemas/project/.pi-map.index.md new file mode 100644 index 0000000..3462393 --- /dev/null +++ b/apps/api/src/schemas/project/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/schemas/project (index) +dir: apps/api/src/schemas/project + +## role +Provides Pydantic data validation schemas for project-related API endpoints including projects, Git repositories, and SSH keys. +## parent +index: apps/api/src/schemas/.pi-map.index.md +map: apps/api/src/schemas/.pi-map.md +## children +- +## files +- __init__.py +- git_repository.py +- project.py +- ssh_key.py +## links +index: apps/api/src/schemas/project/.pi-map.index.md +map: apps/api/src/schemas/project/.pi-map.md +## workflows +- change project behavior + read: __init__.py, git_repository.py, project.py +## dirty +- diff --git a/apps/api/src/schemas/project/.pi-map.md b/apps/api/src/schemas/project/.pi-map.md new file mode 100644 index 0000000..4f643b7 --- /dev/null +++ b/apps/api/src/schemas/project/.pi-map.md @@ -0,0 +1,30 @@ +# apps/api/src/schemas/project +dir: apps/api/src/schemas/project + +index: apps/api/src/schemas/project/.pi-map.index.md + +## role +Provides Pydantic data validation schemas for project-related API endpoints including projects, Git repositories, and SSH keys. +## files +- __init__.py | Re-exports Pydantic schema classes from submodules to provide a unified public API for the project schemas module | dep: src.schemas.project.git_repository, src.schemas.project.project, src.schemas.project.ssh_key +- git_repository.py | Defines Pydantic request/response schemas for Git repository operations in an API. | exp: class:GitRepositoryCreate, class:URLParseRequest, class:URLParseResponse, class:GitRepositoryResponse, class:UpdateSSHKeyRequest, class:FileListResponse, class:FileContentResponse, class:BranchesResponse, class:FileUpdateRequest, class:FileUpdateResponse, class:StatusResponse, class:BranchCreateRequest, class:CheckoutRequest, class:CommitRequest, class:CommitResponse, class:FetchResponse, class:PullResponse, class:PushResponse, class:MergeRequest, class:MergeResponse | dep: uuid, datetime, pydantic +- project.py | Defines Pydantic request/response schemas for project-related API operations. | exp: class:ProjectCreate, class:ProjectUpdate, class:ProjectResponse, class:SetDefaultSSHKeyRequest | dep: uuid, pydantic +- ssh_key.py | Defines Pydantic schemas for SSH key creation, response, signing, and signature verification in an API. | exp: class:SSHKeyCreate, class:SSHKeyResponse, class:SignPayloadRequest, class:SignatureResponse, class:VerifySignatureRequest, class:VerifySignatureResponse | dep: uuid, datetime, pydantic +## arch +Modular schema-per-domain pattern with clean separation of concerns, using Pydantic models for request/response validation and an `__init__.py` facade for unified public API access. +## tags +response, request, project, create, update, sshkey, pydantic, schemas +## symbols +- GitRepositoryCreate +- URLParseRequest +- URLParseResponse +- GitRepositoryResponse +- UpdateSSHKeyRequest +- FileListResponse +- FileContentResponse +- BranchesResponse +## workflows +- change project behavior + read: __init__.py, git_repository.py, project.py +## dirty +- diff --git a/apps/api/src/schemas/system/.pi-map.index.md b/apps/api/src/schemas/system/.pi-map.index.md new file mode 100644 index 0000000..d0dacb8 --- /dev/null +++ b/apps/api/src/schemas/system/.pi-map.index.md @@ -0,0 +1,21 @@ +# apps/api/src/schemas/system (index) +dir: apps/api/src/schemas/system + +## role +Provides Pydantic schemas for system health monitoring endpoints in the API. +## parent +index: apps/api/src/schemas/.pi-map.index.md +map: apps/api/src/schemas/.pi-map.md +## children +- +## files +- __init__.py +- health.py +## links +index: apps/api/src/schemas/system/.pi-map.index.md +map: apps/api/src/schemas/system/.pi-map.md +## workflows +- change system behavior + read: __init__.py, health.py +## dirty +- diff --git a/apps/api/src/schemas/system/.pi-map.md b/apps/api/src/schemas/system/.pi-map.md new file mode 100644 index 0000000..e0d568a --- /dev/null +++ b/apps/api/src/schemas/system/.pi-map.md @@ -0,0 +1,25 @@ +# apps/api/src/schemas/system +dir: apps/api/src/schemas/system + +index: apps/api/src/schemas/system/.pi-map.index.md + +## role +Provides Pydantic schemas for system health monitoring endpoints in the API. +## files +- __init__.py | Re-exports health check schema classes from a submodule to provide a unified interface for the system schemas module. | dep: src.schemas.system.health +- health.py | Defines Pydantic data models for health check API responses including database, disk, and overall system health status. | exp: class:DatabaseHealth, class:DiskHealth, class:HealthChecks, class:HealthResponse, class:DatabaseHealthResponse | dep: pydantic +## arch +Simple submodule pattern with explicit re-exports in __init__.py, using Pydantic models for structured API response validation. +## tags +health, database, response, system, disk, check, schemas, init +## symbols +- DatabaseHealth +- DiskHealth +- HealthChecks +- HealthResponse +- DatabaseHealthResponse +## workflows +- change system behavior + read: __init__.py, health.py +## dirty +- diff --git a/apps/api/src/schemas/tool/.pi-map.index.md b/apps/api/src/schemas/tool/.pi-map.index.md new file mode 100644 index 0000000..0b40ddb --- /dev/null +++ b/apps/api/src/schemas/tool/.pi-map.index.md @@ -0,0 +1,22 @@ +# apps/api/src/schemas/tool (index) +dir: apps/api/src/schemas/tool + +## role +Provides Pydantic data validation schemas for tool-related API operations including tool types and instances. +## parent +index: apps/api/src/schemas/.pi-map.index.md +map: apps/api/src/schemas/.pi-map.md +## children +- +## files +- __init__.py +- tool_instance.py +- tool_type.py +## links +index: apps/api/src/schemas/tool/.pi-map.index.md +map: apps/api/src/schemas/tool/.pi-map.md +## workflows +- change tool behavior + read: __init__.py, tool_instance.py, tool_type.py +## dirty +- diff --git a/apps/api/src/schemas/tool/.pi-map.md b/apps/api/src/schemas/tool/.pi-map.md new file mode 100644 index 0000000..5ef63be --- /dev/null +++ b/apps/api/src/schemas/tool/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/src/schemas/tool +dir: apps/api/src/schemas/tool + +index: apps/api/src/schemas/tool/.pi-map.index.md + +## role +Provides Pydantic data validation schemas for tool-related API operations including tool types and instances. +## files +- __init__.py | Re-exports tool-related schema classes from submodules to provide a unified import interface for the tool schemas module. | dep: src.schemas.tool.tool_instance, src.schemas.tool.tool_type +- tool_instance.py | Defines Pydantic request/response schemas for tool instance lifecycle operations (create and start). | exp: class:CreateInstanceRequest, class:StartInstanceRequest | dep: pydantic +- tool_type.py | Defines Pydantic request/response schemas for creating, updating, and validating tool types with Docker compose/dockerfile/manifest definitions | exp: class:ToolTypeCreate, class:ToolTypeUpdate, class:ToolTypeResponse, class:ToolTypeValidateRequest | dep: uuid, datetime, pydantic, src.api.tool.tool_types_validation +## arch +Modular schema organization with submodule-per-entity pattern and unified re-export interface via `__init__.py`, following standard Python package structure for clean API imports. +## tags +tool, type, request, instance, schemas, create, pydantic, response +## symbols +- CreateInstanceRequest +- StartInstanceRequest +- ToolTypeCreate +- ToolTypeUpdate +- ToolTypeResponse +- ToolTypeValidateRequest +## workflows +- change tool behavior + read: __init__.py, tool_instance.py, tool_type.py +## dirty +- diff --git a/apps/api/src/schemas/user/.pi-map.index.md b/apps/api/src/schemas/user/.pi-map.index.md new file mode 100644 index 0000000..7f4da33 --- /dev/null +++ b/apps/api/src/schemas/user/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/schemas/user (index) +dir: apps/api/src/schemas/user + +## role +Provides centralized Pydantic data validation schemas for user-related API requests and responses. +## parent +index: apps/api/src/schemas/.pi-map.index.md +map: apps/api/src/schemas/.pi-map.md +## children +- +## files +- __init__.py +- user.py +- user_config.py +## links +index: apps/api/src/schemas/user/.pi-map.index.md +map: apps/api/src/schemas/user/.pi-map.md +## workflows +- change user behavior + read: __init__.py, user.py, user_config.py +- change user config + read: user_config.py +## dirty +- diff --git a/apps/api/src/schemas/user/.pi-map.md b/apps/api/src/schemas/user/.pi-map.md new file mode 100644 index 0000000..e9d06e2 --- /dev/null +++ b/apps/api/src/schemas/user/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/src/schemas/user +dir: apps/api/src/schemas/user + +index: apps/api/src/schemas/user/.pi-map.index.md + +## role +Provides centralized Pydantic data validation schemas for user-related API requests and responses. +## files +- __init__.py | Re-exports user-related Pydantic schemas from submodules to provide a unified public API for the user schemas package. | dep: src.schemas.user.user, src.schemas.user.user_config +- user.py | Defines Pydantic response and update schemas for user profile data | exp: class:UserProfileResponse, class:UserProfileUpdate | dep: uuid, pydantic +- user_config.py | Defines Pydantic models for user configuration data transfer objects (response and update schemas). | exp: class:UserConfigResponse, class:UserConfigUpdate | dep: pydantic +## arch +Modular package pattern with submodule separation of concerns (user profile vs. user config) and unified public API via `__init__.py` re-exports. +## tags +user, schemas, response, update, config, pydantic, profile, src +## symbols +- UserProfileResponse +- UserProfileUpdate +- UserConfigResponse +- UserConfigUpdate +## workflows +- change user behavior + read: __init__.py, user.py, user_config.py +- change user config + read: user_config.py +## dirty +- diff --git a/apps/api/src/scripts/.pi-map.index.md b/apps/api/src/scripts/.pi-map.index.md new file mode 100644 index 0000000..01cc6aa --- /dev/null +++ b/apps/api/src/scripts/.pi-map.index.md @@ -0,0 +1,21 @@ +# apps/api/src/scripts (index) +dir: apps/api/src/scripts + +## role +Provides utility scripts for administrative and setup tasks for the API application. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- +## files +- __init__.py +- seed.py +## links +index: apps/api/src/scripts/.pi-map.index.md +map: apps/api/src/scripts/.pi-map.md +## workflows +- change scripts behavior + read: __init__.py, seed.py +## dirty +- diff --git a/apps/api/src/scripts/.pi-map.md b/apps/api/src/scripts/.pi-map.md new file mode 100644 index 0000000..a8d7829 --- /dev/null +++ b/apps/api/src/scripts/.pi-map.md @@ -0,0 +1,28 @@ +# apps/api/src/scripts +dir: apps/api/src/scripts + +index: apps/api/src/scripts/.pi-map.index.md + +## role +Provides utility scripts for administrative and setup tasks for the API application. +## files +- __init__.py | Marks the directory as a Python package and provides a docstring describing it as utility scripts for the API package. +- seed.py | Seeds a development user into the database using SQLAlchemy async operations, with idempotency check to avoid duplicates. | exp: func:build_seed_user() → Mapping[str, str | None], func:seed_database(session: AsyncSession) → User, call:build_seed_user, call:session.scalar, call:select(User).where, call:User, call:session.add, call:session.commit, call:session.refresh, func:run() → None, call:SessionLocal, call:seed_database, call:print, call:str, func:main() → None, call:asyncio.run, call:run | dep: collections.abc, sqlalchemy, sqlalchemy.ext.asyncio, src.database, src.models.user, asyncio +## arch +Simple procedural scripts using async SQLAlchemy for database operations, with idempotency guards for safe re-runs. +## tags +seed, user, database, sqlalchemy, package, init, call:build, call:session.scalar +## symbols +- build_seed_user +- seed_database +- run +- main +- call:build_seed_user +- call:session.scalar +- call:select(User).where +- call:User +## workflows +- change scripts behavior + read: __init__.py, seed.py +## dirty +- diff --git a/apps/api/src/seeds/.pi-map.index.md b/apps/api/src/seeds/.pi-map.index.md new file mode 100644 index 0000000..d769bdc --- /dev/null +++ b/apps/api/src/seeds/.pi-map.index.md @@ -0,0 +1,21 @@ +# apps/api/src/seeds (index) +dir: apps/api/src/seeds + +## role +Provides database seeding utilities for initializing built-in tool types in the API application. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- +## files +- __init__.py +- builtin_tool_types.py +## links +index: apps/api/src/seeds/.pi-map.index.md +map: apps/api/src/seeds/.pi-map.md +## workflows +- change seeds behavior + read: __init__.py, builtin_tool_types.py +## dirty +- diff --git a/apps/api/src/seeds/.pi-map.md b/apps/api/src/seeds/.pi-map.md new file mode 100644 index 0000000..a21024a --- /dev/null +++ b/apps/api/src/seeds/.pi-map.md @@ -0,0 +1,28 @@ +# apps/api/src/seeds +dir: apps/api/src/seeds + +index: apps/api/src/seeds/.pi-map.index.md + +## role +Provides database seeding utilities for initializing built-in tool types in the API application. +## files +- __init__.py | Marks the directory as a Python package for database seeding utilities. +- builtin_tool_types.py | Seeds built-in Docker Compose-based tool types (VS Code Server, Jupyter Notebook, OpenCode) into a database with idempotent create-or-update logic. | exp: func:_table_exists(session, table_name: str) → bool, call:session.execute, call:text, call:result.scalar, func:seed_builtin_tool_types(), call:SessionLocal, call:_table_exists, call:logger.warning, call:session.scalar, call:select(ToolType).where, call:ToolType, call:tool_data.get, call:session.add, call:logger.info, call:session.commit | dep: logging, sqlalchemy, src.database, src.models +## arch +Simple procedural seeding scripts with idempotent create-or-update logic using direct database operations, organized as a Python package with one seed module per entity type. +## tags +tool, types, table, exists, builtin, call:tool, database, init +## symbols +- _table_exists +- seed_builtin_tool_types +- call:session.execute +- call:text +- call:result.scalar +- call:SessionLocal +- call:_table_exists +- call:logger.warning +## workflows +- change seeds behavior + read: __init__.py, builtin_tool_types.py +## dirty +- diff --git a/apps/api/src/services/.pi-map.index.md b/apps/api/src/services/.pi-map.index.md new file mode 100644 index 0000000..4dc40e6 --- /dev/null +++ b/apps/api/src/services/.pi-map.index.md @@ -0,0 +1,42 @@ +# apps/api/src/services (index) +dir: apps/api/src/services + +## role +Initializes the services directory as a Python package for business logic modules. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- apps/api/src/services/config + index: apps/api/src/services/config/.pi-map.index.md + map: apps/api/src/services/config/.pi-map.md +- apps/api/src/services/docker + index: apps/api/src/services/docker/.pi-map.index.md + map: apps/api/src/services/docker/.pi-map.md +- apps/api/src/services/git + index: apps/api/src/services/git/.pi-map.index.md + map: apps/api/src/services/git/.pi-map.md +- apps/api/src/services/instance + index: apps/api/src/services/instance/.pi-map.index.md + map: apps/api/src/services/instance/.pi-map.md +- apps/api/src/services/shared + index: apps/api/src/services/shared/.pi-map.index.md + map: apps/api/src/services/shared/.pi-map.md +- apps/api/src/services/terminal + index: apps/api/src/services/terminal/.pi-map.index.md + map: apps/api/src/services/terminal/.pi-map.md +- apps/api/src/services/tool + index: apps/api/src/services/tool/.pi-map.index.md + map: apps/api/src/services/tool/.pi-map.md +## files +- __init__.py +## links +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## workflows +- change services behavior + read: __init__.py +- explore services subdirectories + index: apps/api/src/services/config/.pi-map.index.md, apps/api/src/services/docker/.pi-map.index.md, apps/api/src/services/git/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/services/.pi-map.md b/apps/api/src/services/.pi-map.md new file mode 100644 index 0000000..b4a7c31 --- /dev/null +++ b/apps/api/src/services/.pi-map.md @@ -0,0 +1,22 @@ +# apps/api/src/services +dir: apps/api/src/services + +index: apps/api/src/services/.pi-map.index.md + +## role +Initializes the services directory as a Python package for business logic modules. +## files +- __init__.py | Empty file with no functionality +## arch +Standard Python package structure using empty __init__.py for namespace declaration. +## tags +init, empty, functionality +## symbols +- +## workflows +- change services behavior + read: __init__.py +- explore services subdirectories + index: apps/api/src/services/config/.pi-map.index.md, apps/api/src/services/docker/.pi-map.index.md, apps/api/src/services/git/.pi-map.index.md +## dirty +- diff --git a/apps/api/src/services/config/.pi-map.index.md b/apps/api/src/services/config/.pi-map.index.md new file mode 100644 index 0000000..4964db9 --- /dev/null +++ b/apps/api/src/services/config/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/api/src/services/config (index) +dir: apps/api/src/services/config + +## role +Provides configuration profile resolution, validation, and CRUD operations for managing hierarchical, mergeable configuration with environment-aware overrides and Git integration. +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- __init__.py +- config_profile_resolver.py +- crud_service.py +- resolver_service.py +## links +index: apps/api/src/services/config/.pi-map.index.md +map: apps/api/src/services/config/.pi-map.md +## workflows +- change config behavior + read: __init__.py, config_profile_resolver.py, crud_service.py +- change config config + read: config_profile_resolver.py +## dirty +- diff --git a/apps/api/src/services/config/.pi-map.md b/apps/api/src/services/config/.pi-map.md new file mode 100644 index 0000000..d74ef5b --- /dev/null +++ b/apps/api/src/services/config/.pi-map.md @@ -0,0 +1,32 @@ +# apps/api/src/services/config +dir: apps/api/src/services/config + +index: apps/api/src/services/config/.pi-map.index.md + +## role +Provides configuration profile resolution, validation, and CRUD operations for managing hierarchical, mergeable configuration with environment-aware overrides and Git integration. +## files +- __init__.py | Re-exports configuration profile resolution components from a subpackage to provide a unified public API. | dep: src.services.config.config_profile_resolver +- config_profile_resolver.py | Resolves configuration profiles recursively with ordered include merging, cycle detection, and deterministic override rules for environment variables, runtime hints, files, mounts, and git mounts. | exp: class:ConfigProfileCycleError, class:ConfigProfileNotFoundError, class:ResolvedMount, class:ResolvedProfile, func:_detect_cycle(profile_id: uuid.UUID, visited: set[uuid.UUID], path: list[uuid.UUID]) → bool, func:_merge_env_vars(base: dict[str, str], overlay: dict[str, str], overrides: dict[str, str], source_name: str) → dict[str, str], call:dict, call:overlay.items, func:_merge_runtime_hints(base: dict[str, Any], overlay: dict[str, Any], overrides: dict[str, str], source_name: str) → dict[str, Any], call:dict, call:overlay.items, func:_merge_files(base: dict[str, str], overlay: dict[str, str], overrides: dict[str, str], source_name: str) → dict[str, str], call:dict, call:overlay.items, func:_merge_mounts(base: dict[str, ResolvedMount], overlay: list[dict[str, Any]], overrides: dict[str, str], source_name: str) → dict[str, ResolvedMount], call:dict, call:mount_data.get, call:files.items, call:ResolvedMount, func:_merge_git_mounts(base: list[dict[str, Any]], overlay: list[dict[str, Any]], source_name: str) → list[dict[str, Any]], call:list, call:enumerate, call:_normalize_git_mount_entry, call:dict, call:m.get, call:mount.get, call:existing.get, call:existing["mappings"].append, call:existing_sources.add, call:len, call:result.append, func:_normalize_git_mount_entry(entry: dict[str, Any]) → dict[str, Any], call:dict, call:entry.get, call:entry.pop, func:_resolve_profile_recursive(session: AsyncSession, profile_id: uuid.UUID, visited: set[uuid.UUID], path: list[uuid.UUID]) → ResolvedProfile, call:_detect_cycle, call:" -> ".join, call:str, call:session.get, call:ResolvedProfile, call:select(ConfigProfileInclude) .where(ConfigProfileInclude.profile_id == profile_id) .order_by, call:session.execute, call:include_result.scalars().all, call:_resolve_profile_recursive, call:result.included_profiles.append, call:_merge_env_vars, call:_merge_runtime_hints, call:_merge_files, call:_merge_mounts, call:included.mounts.values, call:_merge_git_mounts, raise:ConfigProfileCycleError, raise:ConfigProfileNotFoundError, func:resolve_profile(session: AsyncSession, profile_id: uuid.UUID) → ResolvedProfile, call:_resolve_profile_recursive, call:set, func:check_include_cycle(session: AsyncSession, profile_id: uuid.UUID, new_include_id) → list[uuid.UUID] | None, call:select(ConfigProfileInclude) .where(ConfigProfileInclude.profile_id == current_id) .order_by, call:session.execute, call:include_result.scalars().all, call:_check_from, call:set, call:len, func:_check_from(current_id: uuid.UUID, target_id: uuid.UUID, visited: set[uuid.UUID], path: list[uuid.UUID]) → list[uuid.UUID] | None, call:select(ConfigProfileInclude) .where(ConfigProfileInclude.profile_id == current_id) .order_by, call:session.execute, call:include_result.scalars().all, call:_check_from, func:apply_resolved_profile(instance_dir: str, resolved: ResolvedProfile, home_dir) → tuple[dict[str, str], dict[str, str], list[dict], dict[str, Any]], call:Path, call:dict, call:files.items, call:full_path.resolve().relative_to, call:instance_path.resolve, call:logger.warning, call:full_path.parent.mkdir, call:full_path.write_text, call:resolved.mounts.values, call:expand_container_path, call:expanded_target.lstrip("/").replace, call:mount_dir.mkdir, call:mount.files.items, call:mount_dir.resolve, call:os.path.join, call:volume_mounts.append, call:str, func:expand_container_path(path: str, home_dir: str) → str, call:path.startswith, call:os.path.join, func:resolved_profile_to_dict(resolved: ResolvedProfile) → dict[str, Any], call:str, call:resolved.mounts.values | dep: logging, os, uuid, dataclasses, typing, sqlalchemy, sqlalchemy.ext.asyncio, src.models, pathlib +- crud_service.py | Provides CRUD operations for configuration profiles including validation, access control, size limits, and include cycle detection. | exp: func:calculate_profile_size(data: dict) → int, call:data.get("env_vars", {}).items, call:len, call:key.encode, call:str(value).encode, call:data.get("runtime_hints", {}).items, call:str(mount.get("target", "")).encode, call:str(mount.get("mode", "")).encode, call:mount.get("files", {}).items, call:path.encode, call:content.encode, call:data.get("files", {}).items, func:get_profile_with_includes(session: AsyncSession, profile_id: uuid.UUID) → ConfigProfile | None, call:session.execute, call:select(ConfigProfile) .where(ConfigProfile.id == profile_id) .options, call:selectinload, call:result.scalar_one_or_none, func:check_access(session: AsyncSession, user_id: uuid.UUID, project_id, tool_type_id) → None, call:session.get, raise:HTTPException, func:validate_git_mounts(session: AsyncSession, user_id: uuid.UUID, git_mounts: list[Any], project_id) → None, call:mount.get, call:remote_url.startswith, raise:HTTPException, func:profile_to_response(profile: ConfigProfile, includes) → dict, call:str, call:profile.created_at.isoformat, call:profile.updated_at.isoformat, func:get_or_create_user_config(session: AsyncSession, user_id: uuid.UUID) → UserConfig, call:session.execute, call:select(UserConfig).where, call:result.scalar_one_or_none, call:UserConfig, call:session.add, func:validate_default_profiles(session: AsyncSession, user_id: uuid.UUID, default_profiles: dict[str, str]) → None, call:default_profiles.items, call:uuid.UUID, call:session.get, raise:HTTPException, func:create_profile(session: AsyncSession, user_id: uuid.UUID, data: Any) → ConfigProfile, call:session.execute, call:select(ConfigProfile) .where( ConfigProfile.user_id == user_id, ConfigProfile.name == data.name, ) .options, call:selectinload, call:existing.scalar_one_or_none, call:uuid.UUID, call:check_access, call:m.model_dump, call:hasattr, call:validate_git_mounts, call:calculate_profile_size, call:data.model_dump, call:ConfigProfile, call:session.add, call:session.commit, call:select(ConfigProfile) .where(ConfigProfile.id == profile.id) .options, call:result.scalar_one, raise:HTTPException, func:update_profile(session: AsyncSession, profile: ConfigProfile, data: Any) → ConfigProfile, call:data.model_dump, call:session.execute, call:select(ConfigProfile).where, call:existing.scalar_one_or_none, call:uuid.UUID, call:check_access, call:m.model_dump, call:hasattr, call:validate_git_mounts, call:profile_to_response, call:calculate_profile_size, call:update_data.items, call:isinstance, call:setattr, call:session.commit, call:select(ConfigProfile) .where(ConfigProfile.id == profile.id) .options, call:selectinload, call:result.scalar_one, raise:HTTPException, func:update_includes(session: AsyncSession, profile: ConfigProfile, included_ids: list[uuid.UUID], user_id: uuid.UUID) → ConfigProfile, call:session.get, call:check_include_cycle, call:" -> ".join, call:str, call:session.execute, call:select(ConfigProfileInclude).where, call:result.scalars().all, call:session.delete, call:session.flush, call:enumerate, call:ConfigProfileInclude, call:session.add, call:session.commit, call:select(ConfigProfile).where, call:result.scalar_one, raise:HTTPException | dep: uuid, typing, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, sqlalchemy.orm, src.models, src.models.project, src.services.config.config_profile_resolver +- resolver_service.py | Resolves default configuration profiles for users/projects/tools and validates Git URLs with SSH key support. | exp: func:resolve_default_profile(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, tool_type_id: uuid.UUID) → dict, call:select(ConfigProfile) .where(ConfigProfile.user_id == user_id) .where( (ConfigProfile.project_id.is_(None) & ConfigProfile.tool_type_id.is_(None)) | (ConfigProfile.project_id == project_id) | (ConfigProfile.tool_type_id == tool_type_id) | ( (ConfigProfile.project_id == project_id) & (ConfigProfile.tool_type_id == tool_type_id) ) ) .order_by, call:ConfigProfile.project_id.is_, call:ConfigProfile.tool_type_id.is_, call:session.execute, call:result.scalars().all, call:str, func:validate_git_url(session: AsyncSession, current_user_id: uuid.UUID, url: str, ssh_key_id: str | None) → ValidateGitUrlResponse, call:parse_git_url, call:url.strip, call:parse_result.get, call:ValidateGitUrlResponse, call:uuid.UUID, call:session.get, call:_get_fernet, call:fernet.decrypt(ssh_key.private_key_encrypted.encode()).decode, call:ssh_key.private_key_encrypted.encode, call:tempfile.mkstemp, call:os.write, call:private_key.encode, call:os.close, call:os.chmod, call:subprocess.run, call:os.path.exists, call:os.unlink, call:result.stderr.strip, call:stderr.lower, call:result.stdout.strip().split, call:line.strip, call:line.split, call:len, call:ref.startswith, call:branches.append | dep: logging, os, subprocess, uuid, typing, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.models, src.services.shared.ssh_keys, src.utils.git_url_parser, src.schemas.config, tempfile +## arch +Layered service architecture with separation between resolution logic (recursive merge with cycle detection), CRUD operations (validation, access control, limits), and default resolution (user/project/tool scoping, Git/SSH integration), exposing a unified public API through `__init__.py` facade pattern. +## tags +profile, call:, call:select, git, merge, call:str, call:session.execute, mounts +## symbols +- ConfigProfileCycleError +- ConfigProfileNotFoundError +- ResolvedMount +- ResolvedProfile +- _detect_cycle +- _merge_env_vars +- _merge_runtime_hints +- _merge_files +## workflows +- change config behavior + read: __init__.py, config_profile_resolver.py, crud_service.py +- change config config + read: config_profile_resolver.py +## dirty +- diff --git a/apps/api/src/services/docker/.pi-map.index.md b/apps/api/src/services/docker/.pi-map.index.md new file mode 100644 index 0000000..d30fbf7 --- /dev/null +++ b/apps/api/src/services/docker/.pi-map.index.md @@ -0,0 +1,26 @@ +# apps/api/src/services/docker (index) +dir: apps/api/src/services/docker + +## role +Provides Docker-based infrastructure services for container orchestration, configuration management, runtime operations, and secure tunneling to expose internal services. +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- __init__.py +- compose.py +- config_staging.py +- container.py +- tunnel.py +## links +index: apps/api/src/services/docker/.pi-map.index.md +map: apps/api/src/services/docker/.pi-map.md +## workflows +- change docker behavior + read: __init__.py, compose.py, config_staging.py +- change docker config + read: config_staging.py +## dirty +- diff --git a/apps/api/src/services/docker/.pi-map.md b/apps/api/src/services/docker/.pi-map.md new file mode 100644 index 0000000..7a625bb --- /dev/null +++ b/apps/api/src/services/docker/.pi-map.md @@ -0,0 +1,33 @@ +# apps/api/src/services/docker +dir: apps/api/src/services/docker + +index: apps/api/src/services/docker/.pi-map.index.md + +## role +Provides Docker-based infrastructure services for container orchestration, configuration management, runtime operations, and secure tunneling to expose internal services. +## files +- __init__.py | Package initialization file that exposes Docker-related service functions for container operations, compose management, configuration staging, and tunnel management. | dep: src.services.docker.compose, src.services.docker.config_staging, src.services.docker.container, src.services.docker.tunnel +- compose.py | Generates, renders, and executes Docker Compose commands for container orchestration with volume sorting and template substitution. | exp: func:sort_volumes_by_specificity(volumes: list[str]) → list[str], call:vol.split, call:len, call:parts[1].rstrip, call:target.count, call:targets.append, call:Counter(targets).items, call:logger.warning, call:sorted, func:_target_depth(vol: str) → int, call:vol.split, call:len, call:parts[1].rstrip, call:target.count, func:render_compose_template(template: str, variables: dict[str, Any]) → str, call:variables.items, call:result.replace, call:str, func:write_compose_file(instance_dir: str, content: str) → str, call:Path, call:compose_path.write_text, call:str, func:execute_compose_command(compose_path: str, action: str, timeout, env_file) → tuple[int, str, str], call:Path, call:cmd.extend, call:cmd.append, call:subprocess.run, call:str, raise:ValueError | dep: logging, subprocess, collections, pathlib, typing, collections.Counter, pathlib.Path, typing.Any +- config_staging.py | Stages configuration files into instance directories with security checks for path traversal. | exp: func:ensure_instance_directory(instance_id: str, base_path) → str, call:Settings, call:Path, call:instance_dir.mkdir, call:str, call:instance_dir.absolute, func:write_env_file(instance_dir: str, env_vars: dict[str, str]) → str, call:Path, call:env_vars.items, call:env_path.write_text, call:"\n".join, call:str, func:write_config_files(instance_dir: str, files: dict[str, str]) → None, call:Path, call:files.items, call:full_path.resolve().relative_to, call:instance_path.resolve, call:full_path.parent.mkdir, call:full_path.write_text, raise:ValueError | dep: logging, pathlib, src.config, src.config.Settings +- container.py | Provides Docker container runtime queries and network management utilities via subprocess calls to the Docker CLI. | exp: func:get_container_id(instance_name: str) → str | None, call:instance_name.lower, call:subprocess.run, call:result.stdout.strip, call:ps_result.stdout.strip().splitlines, call:line.split, call:len, call:name.lower, func:get_container_name(instance_name: str) → str | None, call:subprocess.run, call:instance_name.lower, call:result.stdout.strip().lstrip, func:get_backend_network_name() → str, call:subprocess.run, call:result.stdout.strip().split, call:net.lower, func:connect_container_to_network(container_name: str, network_name) → bool, call:get_backend_network_name, call:subprocess.run, func:get_container_ip_on_network(container_id: str, network_name) → str | None, call:get_backend_network_name, call:subprocess.run, call:result.stdout.strip, func:is_container_on_network(container_id: str, network_name) → bool, call:get_backend_network_name, call:subprocess.run, func:get_container_status(container_id: str) → dict[str, Any], call:subprocess.run, call:result.stdout.strip().split, call:int, call:len, call:parts[1].isdigit, func:wait_for_container_running(container_id: str, timeout, interval) → dict[str, Any], call:time.time, call:get_container_status, call:time.sleep, func:get_container_logs(container_id: str, tail) → str, call:subprocess.run, call:str, func:find_free_port(start, end) → int, call:range, call:socket.socket, call:s.connect_ex, raise:RuntimeError | dep: logging, subprocess, time, typing, socket +- tunnel.py | Manages Cloudflare tunnels by orchestrating cloudflared Docker containers to expose internal services via temporary public URLs. | exp: func:_tunnel_container_name(instance_name: str) → str, call:instance_name.lower, func:_ensure_image() → None, call:subprocess.run, call:result.stdout.strip, call:logger.info, call:logger.warning, func:_cleanup_stale_tunnel(tunnel_name: str) → None, call:subprocess.run, func:_get_tunnel_logs(tunnel_name: str) → tuple[str, str], call:subprocess.run, func:_get_tunnel_exit_code(tunnel_name: str) → int | None, call:subprocess.run, call:int, call:result.stdout.strip, func:start_tunnel(instance_name: str, container_port: int, timeout, target_url) → dict[str, str], call:_ensure_image, call:_tunnel_container_name, call:_cleanup_stale_tunnel, call:instance_name.lower, call:get_backend_network_name, call:logger.debug, call:" ".join, call:subprocess.run, call:proc.stdout.strip, call:re.compile, call:__import__("time").time, call:_get_tunnel_logs, call:url_pattern.search, call:match.group, call:_get_tunnel_exit_code, call:__import__("time").sleep, call:logger.info, raise:RuntimeError, func:stop_tunnel(instance_name: str) → None, call:_tunnel_container_name, call:_cleanup_stale_tunnel, call:logger.debug, func:recreate_tunnel(instance_name: str, container_port: int, target_url) → dict[str, str], call:stop_tunnel, call:start_tunnel, func:check_tunnel_health(url: str, timeout) → dict[str, Any], call:subprocess.run, call:int, call:result.stdout.strip, call:str(exc).lower, call:any | dep: logging, re, subprocess, typing, src.services.docker.container +## arch +Modular service-oriented architecture with subprocess-based Docker CLI integration, Jinja2 templating for compose generation, path-traversal-safe file staging, and Cloudflare tunnel orchestration via containerized cloudflared. +## tags +tunnel, container, call:subprocess.run, get, name, call:, network, call:result.stdout.strip +## symbols +- sort_volumes_by_specificity +- _target_depth +- render_compose_template +- write_compose_file +- execute_compose_command +- ensure_instance_directory +- write_env_file +- write_config_files +## workflows +- change docker behavior + read: __init__.py, compose.py, config_staging.py +- change docker config + read: config_staging.py +## dirty +- diff --git a/apps/api/src/services/git/.pi-map.index.md b/apps/api/src/services/git/.pi-map.index.md new file mode 100644 index 0000000..11f3031 --- /dev/null +++ b/apps/api/src/services/git/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/services/git (index) +dir: apps/api/src/services/git + +## role +Provides git repository operations for workspace management including cloning, authentication, and common git commands +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- __init__.py +- clone.py +- git_operations.py +- git_service.py +- operations.py +## links +index: apps/api/src/services/git/.pi-map.index.md +map: apps/api/src/services/git/.pi-map.md +## workflows +- change git behavior + read: __init__.py, clone.py, git_operations.py +## dirty +- diff --git a/apps/api/src/services/git/.pi-map.md b/apps/api/src/services/git/.pi-map.md new file mode 100644 index 0000000..22d2f8b --- /dev/null +++ b/apps/api/src/services/git/.pi-map.md @@ -0,0 +1,31 @@ +# apps/api/src/services/git +dir: apps/api/src/services/git + +index: apps/api/src/services/git/.pi-map.index.md + +## role +Provides git repository operations for workspace management including cloning, authentication, and common git commands +## files +- __init__.py | Exports the public API for the git services module by re-exporting key classes and functions from submodules. | dep: src.services.git.clone, src.services.git.git_operations, src.services.git.git_service +- clone.py | Provides git repository cloning with optional SSH authentication, dirty state checking, and cleanup utilities | exp: func:clone_repository(remote_url: str, ssh_key_path: str | None, instance_dir: str, branch) → str, call:Path, call:clone_path.mkdir, call:os.environ.copy, call:str, call:logger.debug, call:subprocess.run, call:logger.error, raise:RuntimeError, func:check_dirty_state(clone_path: str) → tuple[bool, list[str]], call:subprocess.run, call:logger.warning, call:line.strip, call:result.stdout.split, call:len, func:remove_clone_directory(instance_dir: str) → None, call:Path, call:clone_path.exists, call:shutil.rmtree, call:logger.debug | dep: logging, os, subprocess, pathlib, shutil +- git_operations.py | Provides asynchronous git operations (status, commit, push, pull, fetch, checkout, history, branches) scoped to a workspace directory by wrapping git CLI commands. | exp: class:GitStatus, class:Commit, class:GitOperations, method:__init__(self, workspace: Workspace) → None, method:_run(self, *cmd: str) → tuple[int, str, str], call:asyncio.create_subprocess_exec, call:proc.communicate, call:stdout.decode, call:stderr.decode, method:status(self) → GitStatus, call:self._run, call:stdout.splitlines, call:line.startswith, call:line[3:].strip, call:branch_info.split("[ahead ")[1].split, call:int, call:ahead_str.split, call:branch_info.split("[behind ")[1].split, call:behind_str.split, call:len, call:untracked.append, call:deleted.append, call:added.append, call:modified.append, call:GitStatus, method:commit(self, message: str) → None, call:self._run, call:logger.info, raise:RuntimeError, method:push(self) → None, call:self._run, call:logger.info, raise:RuntimeError, method:pull(self) → None, call:self._run, call:logger.info, raise:RuntimeError, method:fetch(self) → None, call:self._run, call:logger.info, raise:RuntimeError, method:checkout(self, branch: str) → None, call:self._run, call:logger.info, raise:RuntimeError, method:history(self, path, limit) → list[Commit], call:cmd.extend, call:self._run, call:stdout.strip().splitlines, call:line.split, call:len, call:commits.append, call:Commit, raise:RuntimeError, method:branches(self) → tuple[list[str], str], call:self._run, call:stdout.strip().splitlines, call:line.strip, call:line.startswith, call:line.endswith, call:line.replace, call:branches.append, raise:RuntimeError | dep: asyncio, logging, dataclasses, src.models, src.models.Workspace +- git_service.py | Provides asynchronous and synchronous git operations (clone, fetch, pull, branch check) with SSH key support for workspace management. | exp: class:GitService | dep: asyncio, logging, os, subprocess, tempfile +- operations.py | Provides git repository operations including cloning, initialization, remote validation, and branch listing with SSH key authentication support. | exp: func:get_repo_path(user_id: uuid.UUID, project_id: uuid.UUID, name: str) → str, call:Settings, call:os.path.join, call:str, func:build_provider_clone_url(owner: str, repo: str) → str, func:prepare_ssh_env(ssh_key: SSHKey | None) → tuple[dict, str] | None, call:_get_fernet, call:fernet.decrypt(ssh_key.private_key_encrypted.encode()).decode, call:ssh_key.private_key_encrypted.encode, call:tempfile.mkstemp, call:os.write, call:private_key.encode, call:os.close, call:os.chmod, func:preflight_remote_repository(remote_url: str, ssh_key) → None, call:prepare_ssh_env, call:subprocess.run, call:os.path.exists, call:os.unlink, call:logger.error, raise:HTTPException, func:clone_working_repository(remote_url: str, repo_path: str, ssh_key) → None, call:prepare_ssh_env, call:subprocess.run, call:os.path.exists, call:os.unlink, call:logger.error, raise:HTTPException, func:init_working_repository(repo_path: str) → None, call:subprocess.run, raise:HTTPException, func:list_remote_branches(remote_url: str, ssh_key) → tuple[list[str], str], call:prepare_ssh_env, call:subprocess.run, call:logger.warning, call:result.stdout.strip().split, call:line.split, call:len, call:ref.startswith, call:branches.append, call:str, call:os.path.exists, call:os.unlink, raise:RuntimeError | dep: logging, os, subprocess, uuid, fastapi, src.config, src.models, src.services.shared.ssh_keys, tempfile +## arch +Layered service architecture with operation decomposition across specialized modules (clone, operations, git_operations, git_service), wrapping git CLI with async/sync variants and SSH key-based authentication +## tags +git, raise:runtime, error, run, call:self., clone, call:subprocess.run, ssh +## symbols +- GitStatus +- Commit +- GitOperations +- GitService +- clone_repository +- check_dirty_state +- remove_clone_directory +- __init__ +## workflows +- change git behavior + read: __init__.py, clone.py, git_operations.py +## dirty +- diff --git a/apps/api/src/services/instance/.pi-map.index.md b/apps/api/src/services/instance/.pi-map.index.md new file mode 100644 index 0000000..94a6e22 --- /dev/null +++ b/apps/api/src/services/instance/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/api/src/services/instance (index) +dir: apps/api/src/services/instance + +## role +Provides infrastructure for managing tool instance lifecycle events, health monitoring, and asynchronous communication within the API service. +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- __init__.py +- event_bus.py +- health_monitor.py +- lifecycle_hooks.py +## links +index: apps/api/src/services/instance/.pi-map.index.md +map: apps/api/src/services/instance/.pi-map.md +## workflows +- change instance behavior + read: __init__.py, event_bus.py, health_monitor.py +## dirty +- diff --git a/apps/api/src/services/instance/.pi-map.md b/apps/api/src/services/instance/.pi-map.md new file mode 100644 index 0000000..4aab369 --- /dev/null +++ b/apps/api/src/services/instance/.pi-map.md @@ -0,0 +1,30 @@ +# apps/api/src/services/instance +dir: apps/api/src/services/instance + +index: apps/api/src/services/instance/.pi-map.index.md + +## role +Provides infrastructure for managing tool instance lifecycle events, health monitoring, and asynchronous communication within the API service. +## files +- __init__.py | Exports public API for instance lifecycle services module | dep: src.services.instance.event_bus, src.services.instance.health_monitor, src.services.instance.lifecycle_hooks +- event_bus.py | Implements a singleton in-memory typed event bus with publish/subscribe pattern for instance lifecycle and health events, supporting both sync and async callbacks with exception isolation. | exp: class:InstanceEventBus, method:__init__(self) → None, method:__new__(cls) → "InstanceEventBus", call:super().__new__, method:_reset_for_testing(self) → None, call:self._subscribers.clear, method:subscribe(self, event_type: str, callback: EventCallback) → Callable[[], None], call:str, call:uuid.uuid4, call:self._subscribers[event_type].append, call:self.unsubscribe, method:unsubscribe(self, event_type: str, callback_id: str) → None, method:unsubscribe_all(self, event_type: str) → None, call:self._subscribers.pop, method:publish(self, event_type: str, payload: InstanceEventPayload) → None, call:callbacks.extend, call:self._subscribers.get, call:inspect.iscoroutinefunction, call:callback, call:payload.get, call:logger.exception | dep: asyncio, inspect, logging, uuid, collections.abc, typing +- health_monitor.py | Background health monitor that periodically polls Docker container and tunnel health for tool instances, publishing state change events and notifications. | exp: class:HealthSnapshot, class:HealthMonitor, method:__init__(self, event_bus: InstanceEventBus) → None, method:start(self) → None, call:self._task.done, call:asyncio.get_running_loop, call:loop.create_task, call:self._poll_loop, method:stop(self) → None, call:self._task.done, call:self._task.cancel, call:self._last_known_state.clear, method:_poll_loop(self) → None, call:asyncio.sleep, call:self._run_check_cycle, call:logger.exception, method:_run_check_cycle(self) → None, call:SessionLocal, call:session.execute, call:select(ToolInstance).where, call:ToolInstance.status.in_, call:result.scalars().all, call:self._check_instance, method:_check_instance(self, session: AsyncSession, instance: ToolInstance) → None, call:logger.debug, call:get_container_status, call:logger.exception, call:str, call:get_correlation_id, call:check_tunnel_health, call:tunnel_result.get, call:HealthSnapshot, call:self._last_known_state.get, call:self._derive_status, call:self._snapshots_equal, call:self._handle_state_change, method:_derive_status(self, snapshot: HealthSnapshot, previous: HealthSnapshot | None, current_status: str | None) → str, method:_snapshots_equal(self, a: HealthSnapshot, b: HealthSnapshot) → bool, method:_handle_state_change(self, session: AsyncSession, instance: ToolInstance, previous: HealthSnapshot | None, snapshot: HealthSnapshot, new_status: str) → None, call:HealthCheck, call:session.add, call:session.commit, call:get_correlation_id, call:str, call:datetime.now(timezone.utc).isoformat, call:self._event_bus.publish, call:notification_service.create_notification, call:logger.exception | dep: asyncio, logging, uuid, dataclasses, datetime, sqlalchemy, sqlalchemy.ext.asyncio, src.database, src.models, src.services.shared.correlation, src.services.docker, src.services.shared.tunnel, src.services.instance.event_bus, src.services.shared.notification_service +- lifecycle_hooks.py | Provides helpers to publish tool instance lifecycle events, persist audit records, and conditionally send user notifications. | exp: func:_derive_title(event_type: str) → str, call:mapping.get, call:event_type.replace("instance.", "").replace("_", " ").title, func:_should_notify(event_type: str, status: str | None) → bool, func:_build_payload(event_type: str, instance: ToolInstance, status, message, metadata) → InstanceEventPayload, call:str, call:datetime.now(timezone.utc).isoformat, call:get_correlation_id, func:_write_audit_row(session: AsyncSession, instance: ToolInstance, event_type: str, created_by, status, message, metadata) → InstanceEvent, call:InstanceEvent, call:event_type.replace, call:session.add, call:session.commit, func:publish_lifecycle_event(event_bus: InstanceEventBus, session: AsyncSession, instance: ToolInstance, event_type: str, created_by, status, message, metadata) → None, call:_build_payload, call:_write_audit_row, call:event_bus.publish, call:_should_notify, call:_derive_title, call:notification_service.create_notification, call:logger.exception, call:payload.get | dep: logging, uuid, datetime, sqlalchemy.ext.asyncio, src.models, src.services.shared.correlation, src.services.instance.event_bus, src.services.shared.notification_service +## arch +Event-driven architecture using a singleton-typed in-memory pub/sub event bus with decoupled background health monitoring, lifecycle hook orchestration, and exception-isolated sync/async callback handling. +## tags +call:self., instance, src, services, event, health, call:logger.exception, check +## symbols +- InstanceEventBus +- HealthSnapshot +- HealthMonitor +- __init__ +- __new__ +- _reset_for_testing +- subscribe +- unsubscribe +## workflows +- change instance behavior + read: __init__.py, event_bus.py, health_monitor.py +## dirty +- diff --git a/apps/api/src/services/shared/.pi-map.index.md b/apps/api/src/services/shared/.pi-map.index.md new file mode 100644 index 0000000..4b963ab --- /dev/null +++ b/apps/api/src/services/shared/.pi-map.index.md @@ -0,0 +1,28 @@ +# apps/api/src/services/shared (index) +dir: apps/api/src/services/shared + +## role +Provides reusable, cross-cutting infrastructure services for the API including I/O safety, container operations, user notifications, request tracing, and workspace lifecycle management. +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- __init__.py +- correlation.py +- file_service.py +- notification_service.py +- permission_fixer.py +- readiness_probe.py +- ssh_keys.py +- tunnel.py +- workspace_manager.py +## links +index: apps/api/src/services/shared/.pi-map.index.md +map: apps/api/src/services/shared/.pi-map.md +## workflows +- change shared behavior + read: __init__.py, correlation.py, file_service.py +## dirty +- diff --git a/apps/api/src/services/shared/.pi-map.md b/apps/api/src/services/shared/.pi-map.md new file mode 100644 index 0000000..26cdfe8 --- /dev/null +++ b/apps/api/src/services/shared/.pi-map.md @@ -0,0 +1,35 @@ +# apps/api/src/services/shared +dir: apps/api/src/services/shared + +index: apps/api/src/services/shared/.pi-map.index.md + +## role +Provides reusable, cross-cutting infrastructure services for the API including I/O safety, container operations, user notifications, request tracing, and workspace lifecycle management. +## files +- __init__.py | Re-exports shared service classes and functions from a services package to provide a unified public API | dep: src.services.shared.correlation, src.services.shared.file_service, src.services.shared.notification_service, src.services.shared.permission_fixer, src.services.shared.readiness_probe, src.services.shared.ssh_keys, src.services.shared.tunnel, src.services.shared.workspace_manager, correlation, file_service, notification_service, permission_fixer, readiness_probe, ssh_keys, tunnel, workspace_manager +- correlation.py | Provides async correlation ID tracking via context variables and FastAPI middleware for request tracing. | exp: class:CorrelationIdMiddleware, method:dispatch(self, request: Request, call_next), call:request.headers.get, call:str, call:uuid.uuid4, call:CORRELATION_ID.set, call:call_next, call:CORRELATION_ID.reset, func:get_correlation_id() → str, call:CORRELATION_ID.get, call:str, call:uuid.uuid4 | dep: contextvars, uuid, fastapi, starlette.middleware.base, fastapi.Request, starlette.middleware.base.BaseHTTPMiddleware +- file_service.py | Provides safe file operations (list, read, write) scoped within a workspace directory with path traversal protection. | exp: class:FileEntry, class:FileService, method:list_directory(self, workspace: Workspace, relative_path) → list[FileEntry], call:os.path.join, call:os.path.normpath, call:abs_path.startswith, call:os.path.exists, call:sorted, call:os.listdir, call:os.path.isdir, call:os.path.getsize, call:os.path.isfile, call:entries.append, call:FileEntry, call:rel.replace, call:entries.sort, call:e.name.lower, raise:ValueError, method:read_file(self, workspace: Workspace, relative_path: str) → str, call:self._resolve_path, call:os.path.isfile, call:open, call:f.read, raise:FileNotFoundError, raise:ValueError, method:write_file(self, workspace: Workspace, relative_path: str, content: str) → None, call:self._resolve_path, call:os.makedirs, call:os.path.dirname, call:open, call:f.write, call:logger.info, method:_resolve_path(self, workspace: Workspace, relative_path: str) → str, call:os.path.normpath, call:os.path.join, call:abs_path.startswith, raise:ValueError | dep: logging, os, dataclasses, src.models, src.models.Workspace +- notification_service.py | Provides an async singleton service for creating, listing, reading, and dismissing user-owned notifications with strict ownership isolation. | exp: class:NotificationService, method:create_notification(self, session: AsyncSession, user_id: uuid.UUID, category: str, severity: str, title: str, message, source_type, source_id, metadata) → Notification, call:Notification, call:session.add, call:session.commit, call:session.refresh, method:list_notifications(self, session: AsyncSession, user_id: uuid.UUID, limit, offset, unread_only, mute_categories) → tuple[list[Notification], int], call:Notification.dismissed_at.is_, call:where_clauses.append, call:Notification.read_at.is_, call:Notification.category.not_in, call:select(func.count()).select_from(Notification).where, call:func.count, call:session.execute, call:total_result.scalar_one, call:select(Notification) .where(*where_clauses) .order_by(Notification.created_at.desc()) .limit(limit) .offset, call:Notification.created_at.desc, call:list, call:items_result.scalars().all, method:get_unread_count(self, session: AsyncSession, user_id: uuid.UUID) → int, call:select(func.count()) .select_from(Notification) .where, call:func.count, call:Notification.read_at.is_, call:Notification.dismissed_at.is_, call:session.execute, call:result.scalar_one, method:mark_read(self, session: AsyncSession, notification_id: uuid.UUID, user_id: uuid.UUID) → Notification, call:self._get_owned_notification, call:datetime.now, call:session.commit, call:session.refresh, method:mark_all_read(self, session: AsyncSession, user_id: uuid.UUID) → int, call:update(Notification) .where( Notification.user_id == user_id, Notification.read_at.is_(None), Notification.dismissed_at.is_(None), ) .values, call:Notification.read_at.is_, call:Notification.dismissed_at.is_, call:datetime.now, call:session.execute, call:session.commit, method:dismiss_all(self, session: AsyncSession, user_id: uuid.UUID) → int, call:update(Notification) .where( Notification.user_id == user_id, Notification.dismissed_at.is_(None), ) .values, call:Notification.dismissed_at.is_, call:datetime.now, call:session.execute, call:session.commit, method:dismiss(self, session: AsyncSession, notification_id: uuid.UUID, user_id: uuid.UUID) → None, call:self._get_owned_notification, call:datetime.now, call:session.commit, method:_get_owned_notification(self, session: AsyncSession, notification_id: uuid.UUID, user_id: uuid.UUID) → Notification, call:session.get, raise:ValueError | dep: uuid, datetime, typing, sqlalchemy, sqlalchemy.engine, sqlalchemy.ext.asyncio, src.models, src.models.Notification +- permission_fixer.py | Applies mount and SSH permission policies inside running Docker containers by executing chown/chmod commands via docker exec as root. | exp: class:PermissionFixError, func:apply_mount_permissions(container_id: str, mounts: list[dict], timeout) → list[dict[str, Any]], call:mount.get, call:logger.debug, call:results.append, call:_run_in_container, call:str, call:logger.warning, func:_exec_and_log(container_id: str, command: list[str], timeout: int, description: str) → str, call:logger.debug, call:" ".join, call:subprocess.run, call:result.stdout.strip, call:result.stderr.strip, raise:PermissionFixError, func:apply_ssh_permissions(container_id: str, ssh_target: str, container_user: str, timeout) → dict[str, Any], call:_exec_and_log, call:logger.info, call:str, call:logger.warning, func:_run_in_container(container_id: str, command: list[str], timeout: int) → None, call:subprocess.run, raise:PermissionFixError, func:check_root_user_available(container_id: str, timeout) → bool, call:_run_in_container | dep: logging, subprocess, typing +- readiness_probe.py | Executes a retryable readiness probe command inside a Docker container with configurable timeout and interval | exp: func:execute_probe(container_id: str, command: str, timeout, interval) → tuple[bool, list[str]], call:asyncio.get_event_loop().time, call:logs.append, call:logger.debug, call:subprocess.run, call:result.stdout.strip, call:result.stderr.strip, call:asyncio.sleep | dep: asyncio, logging, subprocess +- ssh_keys.py | Decrypts and writes SSH key files to instance directories for container mounting, with optional ownership configuration and SSH config generation. | exp: func:_get_fernet() → Fernet, call:Settings, call:hashlib.sha256(settings.session_secret.encode()).digest, call:settings.session_secret.encode, call:base64.urlsafe_b64encode, call:Fernet, func:_sanitize_filename(name: str) → str, call:re.sub, call:sanitized.strip, func:prepare_ssh_key_files(instance_dir: str, ssh_key, subdir, uid, gid, key_filename, write_config) → str, call:Path, call:ssh_dir.mkdir, call:_get_fernet, call:fernet.decrypt(ssh_key.private_key_encrypted.encode()).decode, call:ssh_key.private_key_encrypted.encode, call:private_key_path.write_text, call:os.chmod, call:public_key_path.write_text, call:config_path.write_text, call:os.chown, call:logger.debug, call:logger.warning, call:os.getuid, call:str, func:write_ssh_config(ssh_dir: str, key_filenames: list[str], uid, gid) → None, call:Path, call:ssh_dir_path.mkdir, call:lines.append, call:"\n".join, call:config_path.write_text, call:os.chmod, call:os.chown, func:cleanup_ssh_key_files(instance_dir: str) → None, call:Path, call:ssh_dir.exists, call:ssh_dir.iterdir, call:file_path.unlink, call:ssh_dir.rmdir | dep: logging, os, re, pathlib, cryptography.fernet, src.config, base64, hashlib +- tunnel.py | Re-exports Docker tunnel functions from a nested module for backward compatibility. | dep: src.services.docker.tunnel +- workspace_manager.py | Manages workspace lifecycle operations including creation, deletion, synchronization, and validation for git repository workspaces. | exp: class:SyncResult, class:WorkspaceHasInstancesError, method:__init__(self, instances: list[dict]) → None, call:super().__init__, call:len, class:WorkspaceManager, method:_workspace_path(self, repo_id: uuid.UUID, name: str) → str, call:os.path.join, call:str, method:create(self, repo: GitRepository, user_id: uuid.UUID, name: str, branch, session) → Workspace, call:self._workspace_path, call:os.path.dirname, call:os.makedirs, call:contextlib.suppress, call:os.chmod, call:logger.info, call:os.path.exists, call:logger.warning, call:shutil.rmtree, call:getattr, call:session.execute, call:select(SSHKey).where, call:result.scalar_one_or_none, call:_get_fernet, call:fernet.decrypt( ssh_key_obj.private_key_encrypted.encode() ).decode, call:ssh_key_obj.private_key_encrypted.encode, call:GitService.clone, call:self._make_world_writable, call:Workspace, call:datetime.now, raise:ValueError, method:delete(self, workspace: Workspace, force, session) → None, call:self._get_instances, call:self._stop_and_delete_instance, call:os.path.exists, call:shutil.rmtree, call:logger.info, call:session.delete, raise:ValueError, raise:WorkspaceHasInstancesError, method:sync(self, workspace: Workspace, session) → SyncResult, call:logger.info, call:session.get, call:getattr, call:session.execute, call:select(SSHKey).where, call:result.scalar_one_or_none, call:_get_fernet, call:fernet.decrypt( ssh_key_obj.private_key_encrypted.encode() ).decode, call:ssh_key_obj.private_key_encrypted.encode, call:GitService.fetch, call:GitService.branch_exists_remotely, call:SyncResult, call:GitService.pull, call:self._make_world_writable, call:datetime.now, method:_make_world_writable(self, path: str) → None, call:contextlib.suppress, call:os.chmod, call:os.walk, call:os.path.join, call:os.stat, method:_get_instances(self, workspace: Workspace, session: AsyncSession) → list[ToolInstance], call:session.execute, call:select(ToolInstance).where, call:list, call:result.scalars().all, method:_stop_and_delete_instance(self, instance: ToolInstance) → None, call:logger.warning | dep: contextlib, logging, os, shutil, stat, uuid, dataclasses, datetime, typing, sqlalchemy, src.models, src.services.git.git_service, src.services.shared.ssh_keys, sqlalchemy.ext.asyncio +## arch +Modular service-oriented architecture with async singletons, context variable-based state propagation, path traversal defense, Docker container exec abstraction, and strict ownership-based isolation boundaries. +## tags +error, get, key, call:self., src, call:ssh, at.is, call:session.execute +## symbols +- CorrelationIdMiddleware +- FileEntry +- FileService +- NotificationService +- PermissionFixError +- SyncResult +- WorkspaceHasInstancesError +- WorkspaceManager +## workflows +- change shared behavior + read: __init__.py, correlation.py, file_service.py +## dirty +- diff --git a/apps/api/src/services/terminal/.pi-map.index.md b/apps/api/src/services/terminal/.pi-map.index.md new file mode 100644 index 0000000..d96081a --- /dev/null +++ b/apps/api/src/services/terminal/.pi-map.index.md @@ -0,0 +1,22 @@ +# apps/api/src/services/terminal (index) +dir: apps/api/src/services/terminal + +## role +Provides backend WebSocket terminal session management with PTY-based interactive shells, lifecycle control, and real-time I/O streaming for remote terminal access. +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- __init__.py +- terminal_manager.py +- terminal_session.py +## links +index: apps/api/src/services/terminal/.pi-map.index.md +map: apps/api/src/services/terminal/.pi-map.md +## workflows +- change terminal behavior + read: __init__.py, terminal_manager.py, terminal_session.py +## dirty +- diff --git a/apps/api/src/services/terminal/.pi-map.md b/apps/api/src/services/terminal/.pi-map.md new file mode 100644 index 0000000..6d7069d --- /dev/null +++ b/apps/api/src/services/terminal/.pi-map.md @@ -0,0 +1,29 @@ +# apps/api/src/services/terminal +dir: apps/api/src/services/terminal + +index: apps/api/src/services/terminal/.pi-map.index.md + +## role +Provides backend WebSocket terminal session management with PTY-based interactive shells, lifecycle control, and real-time I/O streaming for remote terminal access. +## files +- __init__.py | Package initialization file that exports the public API for a terminal services module | dep: src.services.terminal.terminal_manager, src.services.terminal.terminal_session +- terminal_manager.py | Manages WebSocket-connected terminal sessions with lifecycle control, idle cleanup, database persistence, and per-instance session limits. | exp: class:MaxSessionsExceededError, method:__init__(self, instance_id: str, max_sessions) → None, call:super().__init__, class:TerminalManager, method:__init__(self) → None, call:self._start_idle_check, method:_start_idle_check(self) → None, call:self._idle_check_task.done, call:asyncio.get_running_loop, call:loop.create_task, call:self._idle_check_loop, method:_idle_check_loop(self) → None, call:asyncio.sleep, call:self._cleanup_idle_sessions, call:logger.error, method:_cleanup_idle_sessions(self) → None, call:list, call:self._sessions.items, call:session.is_idle, call:idle_keys.append, call:logger.info, call:self._sessions.pop, call:session.close, call:asyncio.create_task, call:self._mark_closed_in_db, method:_insert_db_session_row(self, session_id: str, instance_id: uuid.UUID, name: str) → None, call:SessionLocal, call:pg_insert(TerminalSessionModel) .values( id=uuid.UUID(session_id), instance_id=instance_id, name=name, status="active", created_at=datetime.now(timezone.utc), last_activity_at=datetime.now(timezone.utc), ) .on_conflict_do_nothing, call:uuid.UUID, call:datetime.now, call:db_session.execute, call:db_session.commit, call:logger.debug, call:logger.error, method:_mark_closed_in_db(self, session_id: str) → None, call:SessionLocal, call:db_session.get, call:uuid.UUID, call:datetime.now, call:db_session.commit, call:logger.debug, call:logger.error, method:_count_sessions_for_instance(self, instance_id_str: str) → int, call:sum, method:create_session(self, instance_id: uuid.UUID, container_id: str, startup_command, name, session_id) → TerminalSession, call:str, call:self._count_sessions_for_instance, call:uuid.uuid4, call:TerminalSession, call:session.start, call:asyncio.create_task, call:self._insert_db_session_row, call:logger.info, raise:MaxSessionsExceededError, method:get_or_create_session(self, instance_id: uuid.UUID, container_id: str, startup_command) → TerminalSession, call:self._start_idle_check, call:str, call:session.is_alive, call:logger.debug, call:session.close, call:logger.info, call:uuid.uuid4, call:TerminalSession, call:session.start, call:asyncio.create_task, call:self._insert_db_session_row, method:get_session(self, instance_id: str, session_id: str) → TerminalSession | None, call:self._sessions.get, call:self._sessions.items, method:_find_key_by_internal_id(self, instance_id: str, internal_session_id: str) → tuple[str, str] | None, call:self._sessions.items, method:get_sessions_for_instance(self, instance_id: str) → list[TerminalSession], call:self._sessions.items, method:close_session(self, instance_id: str, session_id: str) → None, call:self._sessions.pop, call:session.close, call:asyncio.create_task, call:self._mark_closed_in_db, call:logger.info, method:attach_websocket(self, session: TerminalSession, websocket: WebSocket) → None, call:session.has_websockets, call:logger.debug, call:list, call:ws.close, call:session._websockets.clear, call:session.attach_websocket, call:session.get_buffer, call:websocket.send_bytes, method:detach_websocket(self, session: TerminalSession, websocket: WebSocket) → None, call:session.detach_websocket, method:reset_session(self, instance_id: uuid.UUID, container_id: str, startup_command, session_id, name) → TerminalSession, call:str, call:logger.debug, call:self._sessions.pop, call:old_session.close, call:asyncio.create_task, call:self._mark_closed_in_db, call:uuid.uuid4, call:TerminalSession, call:new_session.start, call:self._insert_db_session_row, method:close_all(self) → None, call:list, call:self._sessions.values, call:self._sessions.clear, call:session.close, call:self._idle_check_task.done, call:self._idle_check_task.cancel | dep: asyncio, logging, uuid, datetime, fastapi, sqlalchemy.dialects.postgresql, src.database, src.models, src.services.terminal.terminal_session, fastapi.WebSocket +- terminal_session.py | Manages a high-performance asyncio-native terminal session using PTY I/O with event-driven reads, output batching, and flow control for WebSocket delivery. | exp: class:TerminalSession, method:__init__(self, session_id: str, instance_id: uuid.UUID, container_id: str, startup_command, name) → None, call:deque, call:set, call:time.time, call:self._generate_name, call:str, call:bytearray, call:asyncio.Lock, method:start(self, startup_command) → None, call:pty.openpty, call:self._set_terminal_size, call:logger.debug, call:asyncio.create_subprocess_exec, call:os.close, call:time.time, call:self._start_reading, method:_start_reading(self) → None, call:asyncio.get_event_loop, call:loop.add_reader, call:logger.debug, call:logger.error, method:_stop_reading(self) → None, call:asyncio.get_event_loop, call:loop.remove_reader, method:_on_fd_readable(self) → None, call:os.read, call:logger.debug, call:self._handle_eof, call:self._add_to_buffer, call:time.time, call:self._queue_output, method:_add_to_buffer(self, data: bytes) → None, call:self._output_buffer.append, call:len, call:self._output_buffer.popleft, method:_queue_output(self, data: bytes) → None, call:self._batch_buffer.extend, call:len, call:self._pause_output, call:asyncio.get_event_loop, call:loop.call_later, method:_flush_batch_sync(self) → None, call:self._batch_buffer.clear, call:bytes, call:set, call:list, call:asyncio.create_task, call:self._send_bytes, call:dead_sockets.add, method:_send_bytes(self, ws: Any, payload: bytes) → None, call:ws.send_bytes, call:self._websockets.discard, method:acknowledge_data(self, char_count: int) → None, call:max, call:self._resume_output, call:self._ack_timeout_handle.cancel, call:asyncio.get_event_loop, call:loop.call_later, method:_ack_timeout_fallback(self) → None, call:logger.warning, call:self._resume_output, method:_pause_output(self) → None, call:self._stop_reading, call:logger.debug, method:_resume_output(self) → None, call:self._start_reading, call:logger.debug, method:get_buffer(self) → bytes, call:b"".join, method:_handle_eof(self) → None, call:self._stop_reading, call:self.process._transport.close, call:set, call:self._websockets.clear, call:asyncio.create_task, call:ws.close, call:logger.info, method:write_input(self, data: bytes) → None, call:os.write, call:time.time, call:logger.debug, call:self._handle_eof, method:_set_terminal_size(self, cols: int, rows: int) → None, call:logger.warning, call:struct.pack, call:fcntl.ioctl, call:logger.debug, call:logger.error, method:resize(self, cols: int, rows: int) → None, call:logger.warning, call:logger.debug, call:self._set_terminal_size, call:os.kill, method:reset(self) → None, call:self.close, call:self._output_buffer.clear, call:self._websockets.clear, call:self._batch_buffer.clear, method:close(self) → None, call:self._stop_reading, call:self._batch_timer.cancel, call:self._ack_timeout_handle.cancel, call:os.close, call:self.process.kill, call:asyncio.wait_for, call:self.process.wait, method:is_alive(self) → bool, method:is_idle(self) → bool, call:time.time, method:attach_websocket(self, websocket: Any) → None, call:self._websockets.add, call:time.time, method:detach_websocket(self, websocket: Any) → None, call:self._websockets.discard, method:has_websockets(self) → bool, call:len, method:send_to_all(self, data: bytes) → None, call:set, call:ws.send_bytes, call:dead_sockets.add, call:self._websockets.discard, method:read_output(self) → bytes | dep: asyncio, logging, os, pty, signal, struct, fcntl, time, uuid, collections, typing, collections.deque +## arch +Asyncio-native event-driven architecture with PTY subprocess I/O, batched output with flow control, session lifecycle management (idle cleanup, persistence, limits), and WebSocket message passing. +## tags +call:self., session, call:logger.debug, idle, output, terminal, check, task +## symbols +- MaxSessionsExceededError +- TerminalManager +- TerminalSession +- __init__ +- _start_idle_check +- _idle_check_loop +- _cleanup_idle_sessions +- _insert_db_session_row +## workflows +- change terminal behavior + read: __init__.py, terminal_manager.py, terminal_session.py +## dirty +- diff --git a/apps/api/src/services/tool/.pi-map.index.md b/apps/api/src/services/tool/.pi-map.index.md new file mode 100644 index 0000000..5a2b376 --- /dev/null +++ b/apps/api/src/services/tool/.pi-map.index.md @@ -0,0 +1,20 @@ +# apps/api/src/services/tool (index) +dir: apps/api/src/services/tool + +## role +Orchestrates Docker container lifecycle for tool instances with git repository mounting, configuration validation, and SSH tunnel management. +## parent +index: apps/api/src/services/.pi-map.index.md +map: apps/api/src/services/.pi-map.md +## children +- +## files +- instance_service.py +## links +index: apps/api/src/services/tool/.pi-map.index.md +map: apps/api/src/services/tool/.pi-map.md +## workflows +- change tool behavior + read: instance_service.py +## dirty +- diff --git a/apps/api/src/services/tool/.pi-map.md b/apps/api/src/services/tool/.pi-map.md new file mode 100644 index 0000000..d4ba21f --- /dev/null +++ b/apps/api/src/services/tool/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/src/services/tool +dir: apps/api/src/services/tool + +index: apps/api/src/services/tool/.pi-map.index.md + +## role +Orchestrates Docker container lifecycle for tool instances with git repository mounting, configuration validation, and SSH tunnel management. +## files +- instance_service.py | Manages Docker-based tool instance lifecycle operations including git repository mounting, config profile validation, compose file generation, container orchestration, and SSH tunnel management. | exp: func:resolve_git_mounts(session: AsyncSession, resolved: ResolvedProfile, instance_dir, working_directory, home_dir) → list[dict], call:tasks.append, call:resolve_single_git_mount, call:asyncio.gather, call:isinstance, call:logger.warning, call:volume_mounts.extend, func:normalize_git_mount(entry: dict) → dict, call:dict, call:entry.get, call:entry.pop, func:clone_git_repo(remote_url: str, branch: str | None, clone_parent: str) → str, call:hashlib.md5(remote_url.encode()).hexdigest, call:remote_url.encode, call:remote_url.split("/")[-1].replace, call:os.path.join, call:os.path.exists, call:os.makedirs, call:clone_repository, call:logger.debug, call:logger.warning, call:pull_repository_updates, call:checkout_branch, func:resolve_git_mount_mappings(repo_path: str, mappings: list[dict], working_directory: str | None, home_dir) → list[dict], call:mapping.get, call:logger.warning, call:expand_container_path, call:target_path.startswith, call:os.path.join, call:expand_glob_source, call:os.path.exists, call:len, call:os.path.relpath, call:volume_mounts.append, call:logger.debug, func:resolve_single_git_mount(session: AsyncSession, git_mount: dict, instance_dir, working_directory, home_dir) → list[dict], call:normalize_git_mount, call:git_mount.get, call:logger.warning, call:asyncio.to_thread, call:resolve_git_mount_mappings, func:checkout_branch(repo_path: str, branch: str) → bool, call:subprocess.run, call:logger.warning, call:result.stderr.strip, func:pull_repository_updates(repo_path: str, remote_url: str) → None, call:subprocess.run, raise:RuntimeError, func:expand_glob_source(source_path: str, repo_path: str) → list[str], call:any, call:os.path.exists, call:glob_module.glob, call:len, call:os.path.abspath, call:abs_path.startswith, call:results.append, call:logger.warning, func:validate_config_profile(session: AsyncSession, profile_id: str | None, user_id: uuid.UUID, project_id: uuid.UUID, tool_type_id: uuid.UUID) → uuid.UUID | None, call:uuid.UUID, call:session.get, raise:HTTPException, func:sanitize_compose_file(compose_path: str) → None, call:Path, call:compose_file.exists, call:compose_file.read_text, call:yaml.safe_load, call:compose_data["services"].items, call:isinstance, call:port_mapping.split, call:len, call:valid_ports.append, call:compose_file.write_text, call:yaml.dump, func:modify_compose_file(compose_path: str, port_override, start_command, working_directory, extra_volumes, home_dir) → None, call:Path, call:compose_file.read_text, call:yaml.safe_load, call:compose_data["services"].items, call:enumerate, call:isinstance, call:port_mapping.split, call:expand_container_path, call:vol.get, call:service_config["volumes"].append, call:service_config.get, call:sort_volumes_by_specificity, call:compose_file.write_text, call:yaml.dump, func:ensure_container_name_in_compose(compose_path: str, container_name: str) → None, call:Path, call:compose_file.exists, call:compose_file.read_text, call:yaml.safe_load, call:compose_data["services"].items, call:container_name.lower, call:compose_file.write_text, call:yaml.dump, call:logger.info, func:ensure_web_bind_address(compose_path: str, tool_type_name: str, default_port: int) → None, call:KNOWN_BIND_FIXES.get, call:Path, call:compose_file.exists, call:compose_file.read_text, call:yaml.safe_load, call:compose_data["services"].values, call:service_config.get, call:compose_file.write_text, call:yaml.dump, call:logger.warning, call:logger.info, func:ensure_backend_network_in_compose(compose_path: str) → None, call:Path, call:compose_file.exists, call:compose_file.read_text, call:yaml.safe_load, call:get_backend_network_name, call:compose_data["services"].values, call:svc_config.get, call:compose_file.write_text, call:yaml.dump, call:logger.info, func:prepare_manifest_instance(session: AsyncSession, instance: ToolInstance, instance_dir: str, repo_path: str, env_vars: dict, extra_volumes: list, working_directory: str | None) → tuple[str, str, dict, str], call:session.get, call:dict, call:resolve_base, call:deep_merge, call:logger.warning, call:merge_with_config, call:manifest.pop, call:env_vars.update, call:extra_volumes.extend, call:compute_image_tag, call:subprocess.run, call:check.stdout.strip, call:compile_dockerfile, call:compile_entrypoint, call:logger.debug, call:len, call:asyncio.to_thread, call:logger.info, call:os.path.join, call:resolve_profile, call:gm.get, call:instance.name.lower, call:compile_compose, call:manifest.get, call:datetime.now, call:get_manifest_home_dir, raise:RuntimeError, func:create_tool_instance(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, data: "CreateInstanceRequest") → ToolInstance, call:session.get, call:uuid.UUID, call:validate_config_profile, call:uuid.uuid4, call:select(ToolInstance) .where(ToolInstance.workspace_id == workspace_id) .where(ToolInstance.tool_type_id == tool_type_id) .where, call:select(ToolInstance) .where(ToolInstance.repository_id == repo_id) .where(ToolInstance.tool_type_id == tool_type_id) .where, call:session.execute, call:len, call:result.scalars().all, call:ensure_instance_directory, call:os.path.join, call:find_free_port, call:prepare_ssh_key_files, call:clone_repository, call:logger.exception, call:cleanup_ssh_key_files, call:os.listdir, call:logger.error, call:logger.debug, call:subprocess.run, call:f"headquarter/{instance_name}:latest".lower, call:asyncio.to_thread, call:logger.info, call:instance_name.lower, call:write_compose_file, call:dict, call:resolve_base, call:deep_merge, call:compute_image_tag, call:compile_compose, call:str, call:render_compose_template, call:yaml.safe_load, call:compose_data["services"].values, call:svc.get, call:logger.warning, call:svc["volumes"].append, call:yaml.dump, call:ToolInstance, call:session.add, call:session.commit, call:session.refresh, call:publish_lifecycle_event, raise:ValueError, raise:RuntimeError, func:start_tool_instance(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, data: "StartInstanceRequest | None") → dict, call:session.get, call:validate_config_profile, call:session.commit, call:os.path.exists, call:logger.info, call:dict, call:resolve_base, call:deep_merge, call:get_manifest_home_dir, call:manifest.get, call:user_cfg.get, call:logger.debug, call:os.path.dirname, call:resolve_profile, call:apply_resolved_profile, call:env_vars.update, call:config_files.update, call:extra_volumes.extend, call:resolve_git_mounts, call:profile_hints.get, call:len, call:logger.error, call:write_env_file, call:write_config_files, call:uuid.UUID, call:ssh_keys_to_mount.append, call:logger.warning, call:os.path.join, call:os.makedirs, call:_sanitize_filename, call:key_filenames.append, call:prepare_ssh_key_files, call:write_ssh_config, call:extra_volumes.append, call:prepare_manifest_instance, call:write_compose_file, call:logger.exception, call:modify_compose_file, call:sanitize_compose_file, call:ensure_web_bind_address, call:ensure_container_name_in_compose, call:ensure_backend_network_in_compose, call:execute_compose_command, call:instance.name.lower, call:get_container_id, call:publish_lifecycle_event, call:wait_for_container_running, call:get_container_logs, call:resolved_manifest.get, call:apply_mount_permissions, call:home_dir.startswith, call:apply_ssh_permissions, call:probe_config.get, call:execute_probe, call:datetime.now().isoformat, call:"\n".join, call:start_tunnel, call:str, call:traceback.format_exc, raise:ValueError, raise:RuntimeError, func:restart_tool_instance(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID) → dict, call:session.get, call:stop_tunnel, call:logger.debug, call:logger.warning, call:os.path.exists, call:os.path.dirname, call:resolve_profile, call:apply_resolved_profile, call:write_env_file, call:logger.error, call:sanitize_compose_file, call:ensure_web_bind_address, call:ensure_container_name_in_compose, call:ensure_backend_network_in_compose, call:execute_compose_command, call:datetime.now, call:session.commit, call:start_tunnel, call:publish_lifecycle_event, raise:ValueError, raise:RuntimeError, func:delete_tool_instance(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, force) → None, call:session.get, call:os.path.dirname, call:os.path.join, call:os.path.exists, call:check_dirty_state, call:stop_tunnel, call:logger.debug, call:logger.warning, call:execute_compose_command, call:shutil.rmtree, call:publish_lifecycle_event, call:session.delete, call:session.commit, raise:ValueError, raise:RuntimeError, func:recreate_instance_tunnel(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID) → dict, call:session.get, call:instance.name.lower, call:logger.info, call:get_container_id, call:logger.error, call:get_backend_network_name, call:is_container_on_network, call:connect_container_to_network, call:get_container_ip_on_network, call:logger.warning, call:recreate_tunnel, call:check_tunnel_health, call:health.get, call:subprocess.run, call:probe.stdout.strip, call:session.commit, call:logger.exception, raise:ValueError, raise:RuntimeError, func:stop_tool_instance(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID) → dict, call:session.get, call:stop_tunnel, call:logger.warning, call:os.path.exists, call:execute_compose_command, call:datetime.now, call:session.commit, call:publish_lifecycle_event, raise:ValueError, func:rename_tool_instance(session: AsyncSession, user_id: uuid.UUID, project_id: uuid.UUID, repo_id: uuid.UUID, instance_id: uuid.UUID, display_name: str) → ToolInstance, call:session.get, call:display_name.strip, call:session.commit, call:session.refresh, raise:ValueError | dep: asyncio, logging, os, subprocess, uuid, datetime, httpx, fastapi, sqlalchemy, sqlalchemy.ext.asyncio, src.models, src.schemas.tool, src.services.git.clone, src.services.config.config_profile_resolver, src.services.docker, src.services.shared.tunnel, src.services.build.docker_build, src.services.build.manifest_compiler, src.services.shared.permission_fixer, src.services.shared.readiness_probe, src.services.shared.ssh_keys, src.services.instance.event_bus, src.services.instance.lifecycle_hooks, src.auth.dependencies, hashlib, yaml, pathlib, traceback, shutil +## arch +Service-oriented architecture with Docker Compose orchestration, git-based code mounting, config profile validation, and SSH tunnel proxying for isolated tool execution environments. +## tags +compose, call:compose, call:logger.warning, error, instance, container, git, text +## symbols +- resolve_git_mounts +- normalize_git_mount +- clone_git_repo +- resolve_git_mount_mappings +- resolve_single_git_mount +- checkout_branch +- pull_repository_updates +- expand_glob_source +## workflows +- change tool behavior + read: instance_service.py +## dirty +- diff --git a/apps/api/src/utils/.pi-map.index.md b/apps/api/src/utils/.pi-map.index.md new file mode 100644 index 0000000..ae990ab --- /dev/null +++ b/apps/api/src/utils/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/api/src/utils (index) +dir: apps/api/src/utils + +## role +Provides Git repository interaction utilities for the API layer, abstracting subprocess-based git operations into reusable Python modules. +## parent +index: apps/api/src/.pi-map.index.md +map: apps/api/src/.pi-map.md +## children +- +## files +- __init__.py +- git_control.py +- git_files.py +- git_history.py +- git_url_parser.py +## links +index: apps/api/src/utils/.pi-map.index.md +map: apps/api/src/utils/.pi-map.md +## workflows +- change utils behavior + read: __init__.py, git_control.py, git_files.py +## dirty +- diff --git a/apps/api/src/utils/.pi-map.md b/apps/api/src/utils/.pi-map.md new file mode 100644 index 0000000..81502c8 --- /dev/null +++ b/apps/api/src/utils/.pi-map.md @@ -0,0 +1,31 @@ +# apps/api/src/utils +dir: apps/api/src/utils + +index: apps/api/src/utils/.pi-map.index.md + +## role +Provides Git repository interaction utilities for the API layer, abstracting subprocess-based git operations into reusable Python modules. +## files +- __init__.py | Empty file with no functionality +- git_control.py | Provides a Python wrapper for common Git repository operations using subprocess calls | exp: class:GitStatus, func:_run_git_command(repo_path: str, *args: str) → str, call:subprocess.run, raise:RuntimeError, func:get_status(repo_path: str) → GitStatus, call:_run_git_command(repo_path, "rev-parse", "--abbrev-ref", "HEAD").strip, call:_run_git_command(repo_path, "symbolic-ref", "--short", "HEAD").strip, call:GitStatus, call:output.strip().split, call:line.startswith, call:branch_info.split("[ahead ")[1].split, call:int, call:ahead_str.split, call:branch_info.split("[behind ")[1].split, call:behind_str.split, call:len, call:status.untracked.append, call:status.added.append, call:status.deleted.append, call:status.renamed.append, call:status.modified.append, func:create_branch(repo_path: str, name: str, base_branch) → None, call:_run_git_command, call:str(e).lower, func:delete_branch(repo_path: str, name: str, force) → None, call:_run_git_command, func:checkout_branch(repo_path: str, name: str) → None, call:_run_git_command, call:str(e).lower, func:commit_changes(repo_path: str, message: str, author_name: str, author_email: str, files) → str, call:_run_git_command(repo_path, "rev-parse", "HEAD").strip, func:fetch(repo_path: str) → None, call:_run_git_command, func:pull(repo_path: str, branch) → None, call:args.append, call:_run_git_command, func:push(repo_path: str, branch) → None, call:args.extend, call:_run_git_command, func:merge(repo_path: str, source_branch: str, target_branch, message) → str, call:checkout_branch, call:args.extend, call:_run_git_command(repo_path, "rev-parse", "HEAD").strip, func:get_current_branch(repo_path: str) → str, call:_run_git_command(repo_path, "rev-parse", "--abbrev-ref", "HEAD").strip, call:_run_git_command(repo_path, "symbolic-ref", "--short", "HEAD").strip | dep: subprocess, dataclasses +- git_files.py | Provides utilities for browsing and manipulating Git repository contents including file trees, branches, file contents, and commits via subprocess git commands. | exp: class:FileTreeEntry, class:BranchInfo, class:FileContent, func:_run_git_command(repo_path: str, *args: str) → str, call:subprocess.run, call:stderr.lower, call:logger.warning, raise:RuntimeError, func:list_tree(repo_path: str, branch, path) → list[FileTreeEntry], call:_run_git_command, call:logger.warning, call:logger.error, call:str(e).lower, call:output.strip().split, call:line.split, call:len, call:meta.split, call:int, call:_get_last_commit_for_path, call:entries.append, call:FileTreeEntry, func:_get_last_commit_for_path(repo_path: str, branch: str, path: str) → dict[str, Any] | None, call:_run_git_command, call:output.strip().split, call:len, func:get_file_content(repo_path: str, branch: str, path: str) → FileContent, call:_run_git_command, call:int, call:size_output.strip, call:_is_binary_file, call:_detect_language, call:_get_last_commit_for_path, call:FileContent, raise:FileNotFoundError, func:_is_binary_file(repo_path: str, branch: str, path: str) → bool, call:subprocess.run, raise:RuntimeError, func:_detect_language(path: str) → str | None, call:Path(path).suffix.lower, call:language_map.get, func:list_branches(repo_path: str) → tuple[list[BranchInfo], str], call:_run_git_command, call:logger.error, call:str, call:r.strip, call:remote_output.strip().split, call:set, call:output.strip().split, call:line.strip, call:branch_name.split, call:branch_name.startswith, call:len, call:any, call:head_output.strip, call:_get_last_commit_for_path, call:branches.append, call:BranchInfo, func:commit_file(repo_path: str, branch: str, path: str, content: str, commit_message: str, author_name: str, author_email: str) → str, call:tempfile.TemporaryDirectory, call:os.path.join, call:os.makedirs, call:os.path.dirname, call:open, call:f.write, call:_run_git_command( worktree_path, "rev-parse", "HEAD", ).strip | dep: logging, subprocess, dataclasses, pathlib, typing, tempfile, os +- git_history.py | Extracts and structures git commit history, metadata, diffs, and graph visualization data from bare/mirror repositories using subprocess git commands. | exp: class:Commit, class:FileChange, class:CommitDetail, func:_run_git_command(repo_path: str, args: list[str]) → str, call:subprocess.run, raise:RuntimeError, func:get_commit_history(repo_path: str, branch, limit, offset) → dict[str, Any], call:_run_git_command, call:b.strip, call:branches_output.strip().split, call:log_args.append, call:_get_branch_map, call:_get_tag_map, call:log_output.strip().split, call:line.strip, call:line.split, call:len, call:parts[1].split, call:commits.append, call:Commit, call:int, call:branch_map.get, call:tag_map.get, call:count_output.strip, call:_build_graph_data, call:enumerate, call:min, call:commit_dicts.append, call:_commit_to_dict, func:get_commit_detail(repo_path: str, commit_hash: str) → dict[str, Any], call:_run_git_command, call:log_output.strip().split, call:len, call:parts[1].split, call:int, call:_parse_stats, call:_parse_diff, call:_get_branch_map, call:_get_tag_map, call:datetime.fromtimestamp(timestamp, tz=timezone.utc).isoformat, call:branch_map.get, call:tag_map.get, call:_file_change_to_dict, raise:ValueError, func:_get_branch_map(repo_path: str) → dict[str, list[str]], call:_run_git_command, call:branch_output.strip().split, call:line.split, call:result[commit_hash].append, func:_get_tag_map(repo_path: str) → dict[str, list[str]], call:_run_git_command, call:tag_output.strip().split, call:line.split, call:result[commit_hash].append, func:_build_graph_data(commits: list[Commit]) → dict[str, Any], call:enumerate, call:hash, call:nodes.append, call:edges.append, func:_parse_stats(stat_output: str) → dict[str, int], call:stat_output.strip().split, call:line.strip, call:line.split, call:part.strip, call:int, call:part.split, func:_parse_diff(diff_output: str) → list[FileChange], call:diff_output.split, call:line.startswith, call:"\n".join, call:files.append, call:FileChange, call:current_diff.append, func:_commit_to_dict(commit: Commit, graph_symbol, graph_depth) → dict[str, Any], call:refs.extend, call:datetime.fromtimestamp(commit.timestamp, tz=timezone.utc).isoformat, func:_file_change_to_dict(file_change: FileChange) → dict[str, Any] | dep: subprocess, dataclasses, datetime, typing +- git_url_parser.py | Parses various Git hosting service URLs (browser, SSH, HTTPS) to extract normalized base repository clone URLs with .git suffix. | exp: func:extract_base_repo_url(url: str) → str | None, call:url.startswith, call:url.endswith, call:urlparse, call:parsed.netloc.lower, call:parsed.path.split, call:_extract_github_url, call:_extract_gitlab_url, call:_extract_bitbucket_url, call:_extract_generic_url, func:_extract_github_url(url: str, path_parts: list[str]) → str | None, call:len, call:repo_name.endswith, func:_extract_gitlab_url(url: str, path_parts: list[str]) → str | None, call:len, call:repo_name.endswith, func:_extract_bitbucket_url(url: str, path_parts: list[str]) → str | None, call:len, call:repo_name.endswith, func:_extract_generic_url(url: str, path_parts: list[str]) → str | None, call:len, call:repo_name.endswith, call:urlparse, func:is_valid_clone_url(url: str) → bool, call:url.startswith, call:urlparse, call:path.endswith, func:parse_git_url(url: str) → dict, call:url.strip, call:urlparse, call:parsed.netloc.lower, call:url.startswith, call:url.split, call:len, call:parts[0].replace, call:is_valid_clone_url, call:extract_base_repo_url | dep: urllib.parse +## arch +Utility-layer architecture with functional decomposition into single-responsibility modules (operations, file browsing, history extraction, URL parsing), all relying on subprocess calls to external git binary rather than native git libraries. +## tags +call:, git, run, command, get, url, commit, call:len +## symbols +- GitStatus +- FileTreeEntry +- BranchInfo +- FileContent +- Commit +- FileChange +- CommitDetail +- _run_git_command +## workflows +- change utils behavior + read: __init__.py, git_control.py, git_files.py +## dirty +- diff --git a/apps/api/tests/.pi-map.index.md b/apps/api/tests/.pi-map.index.md new file mode 100644 index 0000000..77ee746 --- /dev/null +++ b/apps/api/tests/.pi-map.index.md @@ -0,0 +1,36 @@ +# apps/api/tests (index) +dir: apps/api/tests + +## role +Shared testing infrastructure and fixtures for the FastAPI API application +## parent +index: apps/api/.pi-map.index.md +map: apps/api/.pi-map.md +## children +- apps/api/tests/api + index: apps/api/tests/api/.pi-map.index.md + map: apps/api/tests/api/.pi-map.md +- apps/api/tests/integration + index: apps/api/tests/integration/.pi-map.index.md + map: apps/api/tests/integration/.pi-map.md +- apps/api/tests/services + index: apps/api/tests/services/.pi-map.index.md + map: apps/api/tests/services/.pi-map.md +- apps/api/tests/system + index: apps/api/tests/system/.pi-map.index.md + map: apps/api/tests/system/.pi-map.md +- apps/api/tests/unit + index: apps/api/tests/unit/.pi-map.index.md + map: apps/api/tests/unit/.pi-map.md +## files +- conftest.py +## links +index: apps/api/tests/.pi-map.index.md +map: apps/api/tests/.pi-map.md +## workflows +- change tests behavior + read: conftest.py +- explore tests subdirectories + index: apps/api/tests/api/.pi-map.index.md, apps/api/tests/integration/.pi-map.index.md, apps/api/tests/services/.pi-map.index.md +## dirty +- diff --git a/apps/api/tests/.pi-map.md b/apps/api/tests/.pi-map.md new file mode 100644 index 0000000..44ba75c --- /dev/null +++ b/apps/api/tests/.pi-map.md @@ -0,0 +1,29 @@ +# apps/api/tests +dir: apps/api/tests + +index: apps/api/tests/.pi-map.index.md + +## role +Shared testing infrastructure and fixtures for the FastAPI API application +## files +- conftest.py | Provides shared pytest fixtures for FastAPI testing with async SQLite database, authenticated clients, and test data setup. | exp: func:test_client() → Generator[TestClient, None, None], call:create_async_engine, call:engine.begin, call:conn.run_sync, call:asyncio.run, call:init_db, call:async_sessionmaker, call:patch, call:TestClient, call:app.dependency_overrides.pop, call:engine.dispose, func:init_db(), call:engine.begin, call:conn.run_sync, func:override_get_db_session() → AsyncGenerator[AsyncSession, None], call:async_sessionmaker, func:db_session(test_client) → AsyncGenerator[AsyncSession, None], call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:gen.aclose, call:create_async_engine, call:engine.begin, call:conn.run_sync, call:async_sessionmaker, call:engine.dispose, func:authenticated_client(test_client) → Generator[TestClient, None, None], call:str, call:uuid.uuid4, call:Settings, call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:User, call:uuid.UUID, call:session.add, call:session.commit, call:gen.aclose, call:asyncio.run, call:create_test_user, call:create_session_cookie, call:test_client.cookies.set, func:create_test_user(), call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:User, call:uuid.UUID, call:session.add, call:session.commit, call:gen.aclose, func:test_project_and_repo(authenticated_client) → tuple[str, str], call:uuid.uuid4, call:Settings, call:authenticated_client.cookies.get, call:decode_session_cookie, call:uuid.UUID, call:asyncio.run, call:get_user_id, call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:Project, call:session.add, call:GitRepository, call:session.commit, call:gen.aclose, call:create_project_and_repo, call:str, raise:RuntimeError, func:get_user_id(), call:Settings, call:authenticated_client.cookies.get, call:decode_session_cookie, call:uuid.UUID, func:create_project_and_repo(), call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:Project, call:session.add, call:GitRepository, call:session.commit, call:gen.aclose, func:admin_client(test_client) → Generator[TestClient, None, None], call:str, call:uuid.uuid4, call:Settings, call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:User, call:uuid.UUID, call:session.add, call:session.commit, call:gen.aclose, call:asyncio.run, call:create_admin_user, call:create_session_cookie, call:test_client.cookies.set, func:create_admin_user(), call:app.dependency_overrides.get, call:override_fn, call:gen.asend, call:User, call:uuid.UUID, call:session.add, call:session.commit, call:gen.aclose | dep: asyncio, os, typing, unittest.mock, pytest, pytest_asyncio, fastapi.testclient, sqlalchemy.ext.asyncio, src.config, src.models.base, src.main, src.auth.dependencies, uuid, src.auth.session, src.models.user, src.models.project, src.models.git_repository, fastapi, sqlalchemy, src.models, src.auth +## arch +Pytest fixture-based dependency injection pattern with async SQLite test database, authenticated HTTP client factories, and modular test data setup utilities +## tags +call:app.dependency, call:create, overrides.get, call:override, fn, call:gen.asend, call:gen.aclose, session +## symbols +- test_client +- init_db +- override_get_db_session +- db_session +- authenticated_client +- create_test_user +- test_project_and_repo +- get_user_id +## workflows +- change tests behavior + read: conftest.py +- explore tests subdirectories + index: apps/api/tests/api/.pi-map.index.md, apps/api/tests/integration/.pi-map.index.md, apps/api/tests/services/.pi-map.index.md +## dirty +- diff --git a/apps/api/tests/api/.pi-map.index.md b/apps/api/tests/api/.pi-map.index.md new file mode 100644 index 0000000..9c3be64 --- /dev/null +++ b/apps/api/tests/api/.pi-map.index.md @@ -0,0 +1,20 @@ +# apps/api/tests/api (index) +dir: apps/api/tests/api + +## role +Integration test suite for API authentication and multi-session WebSocket terminal functionality. +## parent +index: apps/api/tests/.pi-map.index.md +map: apps/api/tests/.pi-map.md +## children +- +## files +- test_terminal_ws_multi.py +## links +index: apps/api/tests/api/.pi-map.index.md +map: apps/api/tests/api/.pi-map.md +## workflows +- change api behavior + read: test_terminal_ws_multi.py +## dirty +- diff --git a/apps/api/tests/api/.pi-map.md b/apps/api/tests/api/.pi-map.md new file mode 100644 index 0000000..b271756 --- /dev/null +++ b/apps/api/tests/api/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/tests/api +dir: apps/api/tests/api + +index: apps/api/tests/api/.pi-map.index.md + +## role +Integration test suite for API authentication and multi-session WebSocket terminal functionality. +## files +- test_terminal_ws_multi.py | Integration tests verifying multi-session terminal WebSocket routes exist and REST API endpoints require authentication | exp: class:TestTerminalWebSocketMultiSession, method:test_specific_session_websocket_route_exists(self, client), call:client.get, method:test_default_session_alias_route_exists(self, client), call:client.get, class:TestTerminalRestApi, method:test_list_sessions_requires_auth(self, client), call:client.get, method:test_create_session_requires_auth(self, client), call:client.post, method:test_close_session_requires_auth(self, client), call:client.delete, method:test_reset_session_requires_auth(self, client), call:client.post, method:test_rename_session_requires_auth(self, client), call:client.post, method:test_legacy_reset_alias_requires_auth(self, client), call:client.post, func:client(), call:TestClient | dep: pytest, fastapi.testclient, src.main +## arch +pytest-based integration testing with FastAPI TestClient, WebSocket endpoint verification, and REST API authentication requirement validation. +## tags +test, session, requires, auth, call:client.post, terminal, call:client.get, multi +## symbols +- TestTerminalWebSocketMultiSession +- TestTerminalRestApi +- test_specific_session_websocket_route_exists +- test_default_session_alias_route_exists +- test_list_sessions_requires_auth +- test_create_session_requires_auth +- test_close_session_requires_auth +- test_reset_session_requires_auth +## workflows +- change api behavior + read: test_terminal_ws_multi.py +## dirty +- diff --git a/apps/api/tests/integration/.pi-map.index.md b/apps/api/tests/integration/.pi-map.index.md new file mode 100644 index 0000000..f33ae17 --- /dev/null +++ b/apps/api/tests/integration/.pi-map.index.md @@ -0,0 +1,37 @@ +# apps/api/tests/integration (index) +dir: apps/api/tests/integration + +## role +Integration and unit test suite for the API backend, covering authentication, REST endpoints, database models, and core services with real database dependencies. +## parent +index: apps/api/tests/.pi-map.index.md +map: apps/api/tests/.pi-map.md +## children +- +## files +- __init__.py +- test_auth_api.py +- test_auth_services.py +- test_config_profiles_api.py +- test_events.py +- test_git_control.py +- test_models.py +- test_notifications_api.py +- test_notifications_lifecycle.py +- test_projects_api.py +- test_seed.py +- test_ssh_keys_api.py +- test_tool_types_api.py +- test_tool_types_api_extended.py +- test_users_api.py +- test_workspaces_api.py +## links +index: apps/api/tests/integration/.pi-map.index.md +map: apps/api/tests/integration/.pi-map.md +## workflows +- change integration behavior + read: __init__.py, test_auth_api.py, test_auth_services.py +- change integration config + read: test_config_profiles_api.py +## dirty +- diff --git a/apps/api/tests/integration/.pi-map.md b/apps/api/tests/integration/.pi-map.md new file mode 100644 index 0000000..3a2c790 --- /dev/null +++ b/apps/api/tests/integration/.pi-map.md @@ -0,0 +1,44 @@ +# apps/api/tests/integration +dir: apps/api/tests/integration + +index: apps/api/tests/integration/.pi-map.index.md + +## role +Integration and unit test suite for the API backend, covering authentication, REST endpoints, database models, and core services with real database dependencies. +## files +- __init__.py | Empty file with no functionality +- test_auth_api.py | Integration tests for FastAPI authentication endpoints (login, me, logout) using a real database and session cookies. | exp: func:_prepare_auth_test_db() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, func:_load_app(), call:importlib.reload, func:_insert_test_user(user_id: str) → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, func:test_login_redirects_to_authentik_authorize_endpoint() → None, call:_prepare_auth_test_db, call:_load_app, call:TestClient, call:client.get, func:test_me_returns_401_without_session_cookie() → None, call:_prepare_auth_test_db, call:_load_app, call:TestClient, call:client.get, func:test_me_returns_user_with_valid_session() → None, call:_prepare_auth_test_db, call:_insert_test_user, call:_load_app, call:Settings, call:create_session_cookie, call:TestClient, call:client.get, call:response.json, func:test_logout_clears_session_cookie() → None, call:_prepare_auth_test_db, call:_load_app, call:TestClient, call:client.post, call:response.headers.get | dep: uuid, asyncio, importlib, fastapi.testclient, pytest, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.session, src.config, src.models, src.models.user, fastapi, src.database, src.api.auth, src.main +- test_auth_services.py | Integration tests for authentication services including cookie options, OIDC login URLs, and session cookie creation/decoding with security validations. | exp: func:test_cookie_options_follow_environment_defaults(monkeypatch) → None, call:monkeypatch.setenv, call:Settings, call:build_cookie_options, func:test_login_redirect_url_contains_required_oidc_params() → None, call:Settings, call:build_login_redirect_url, func:test_create_and_decode_session_cookie_round_trip() → None, call:Settings, call:create_session_cookie, call:decode_session_cookie, func:test_decode_session_rejects_invalid_signature() → None, call:Settings, call:create_session_cookie, call:pytest.raises, call:decode_session_cookie, func:test_decode_session_rejects_expired_cookie(monkeypatch) → None, call:Settings, call:create_session_cookie, call:pytest.raises, call:decode_session_cookie | dep: pytest, src.auth.cookies, src.auth.oidc, src.auth.session, src.config +- test_config_profiles_api.py | Integration tests for a FastAPI config profiles REST API covering CRUD operations, profile inheritance, default resolution, git mounts, and validation. | exp: class:TestConfigProfilesAPI, method:test_list_config_profiles_requires_authentication(self, test_client: TestClient) → None, call:test_client.get, method:test_list_config_profiles_returns_user_profiles(self, authenticated_client: TestClient) → None, call:authenticated_client.get, call:response.json, call:isinstance, method:test_create_config_profile_successfully(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_create_config_profile_duplicate_name(self, authenticated_client: TestClient) → None, call:authenticated_client.post, method:test_create_config_profile_exceeds_size_limit(self, authenticated_client: TestClient) → None, call:authenticated_client.post, method:test_create_config_profile_invalid_file_path(self, authenticated_client: TestClient) → None, call:authenticated_client.post, method:test_create_config_profile_invalid_mount_target(self, authenticated_client: TestClient) → None, call:authenticated_client.post, method:test_get_config_profile_by_id(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.get, call:response.json, method:test_get_config_profile_not_found(self, authenticated_client: TestClient) → None, call:authenticated_client.get, call:uuid.uuid4, method:test_update_config_profile_successfully(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.put, call:response.json, method:test_delete_config_profile_successfully(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.delete, call:authenticated_client.get, method:test_update_profile_includes_successfully(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:base_response.json, call:child_response.json, call:authenticated_client.put, call:response.json, call:print, call:data.get, call:len, method:test_update_profile_includes_cycle_detection(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:a_response.json, call:b_response.json, call:authenticated_client.put, method:test_preview_config_profile_successfully(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:base_response.json, call:child_response.json, call:authenticated_client.put, call:authenticated_client.get, call:response.json, call:len, method:test_resolve_default_profile(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:str, call:uuid.uuid4, call:authenticated_client.get, call:response.json, method:test_resolve_default_profile_no_match(self, authenticated_client: TestClient) → None, call:str, call:uuid.uuid4, call:authenticated_client.get, call:response.json, method:test_create_config_profile_with_git_mounts(self, authenticated_client: TestClient, test_project_and_repo) → None, call:authenticated_client.post, call:response.json, call:len, method:test_update_config_profile_git_mounts(self, authenticated_client: TestClient, test_project_and_repo) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.put, call:response.json, call:len, method:test_create_config_profile_invalid_git_mount_source_path(self, authenticated_client: TestClient, test_project_and_repo) → None, call:authenticated_client.post, method:test_create_config_profile_invalid_git_mount_target_path_traversal(self, authenticated_client: TestClient, test_project_and_repo) → None, call:authenticated_client.post, method:test_preview_config_profile_with_git_mounts(self, authenticated_client: TestClient, test_project_and_repo) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.get, call:response.json, call:len | dep: uuid, pytest, fastapi.testclient, fastapi.testclient.TestClient +- test_events.py | Integration tests for SSE endpoint authentication, connection limits, and lifecycle event publishing/persistence via pub/sub event bus. | exp: func:event_bus() → Generator[InstanceEventBus, None, None], call:InstanceEventBus, call:bus._reset_for_testing, func:sample_payload() → InstanceEventPayload, call:str, call:uuid.uuid4, func:_get_user_id_from_client(client: TestClient) → uuid.UUID | None, call:Settings, call:client.cookies.get, call:decode_session_cookie, call:uuid.UUID, func:test_sse_requires_auth(test_client: TestClient) → None, call:test_client.get, func:test_sse_enforces_connection_limit(authenticated_client: TestClient) → None, call:_get_user_id_from_client, call:authenticated_client.get, call:events_module._connection_counts.pop, func:test_sse_event_generator_format() → None, call:getattr, call:any, call:str, func:test_lifecycle_hook_publishes_event_and_persists(authenticated_client: TestClient, db_session: AsyncSession, event_bus: InstanceEventBus) → None, call:_get_user_id_from_client, call:Project, call:uuid.uuid4, call:GitRepository, call:ToolType, call:db_session.add_all, call:db_session.commit, call:ToolInstance, call:db_session.add, call:received.append, call:event_bus.subscribe, call:publish_lifecycle_event, call:len, call:db_session.execute, call:select(InstanceEvent).where, call:result.scalars().all, func:subscriber(payload: InstanceEventPayload) → None, call:received.append, func:test_lifecycle_event_persists_audit_row(authenticated_client: TestClient, db_session: AsyncSession, event_bus: InstanceEventBus) → None, call:_get_user_id_from_client, call:Project, call:uuid.uuid4, call:GitRepository, call:ToolType, call:db_session.add_all, call:db_session.commit, call:ToolInstance, call:db_session.add, call:publish_lifecycle_event, call:db_session.execute, call:select(InstanceEvent).where, call:result.scalars().all, call:len, func:test_event_bus_pubsub(event_bus: InstanceEventBus) → None, call:received.append, call:event_bus.subscribe, call:str, call:uuid.uuid4, call:asyncio.run, call:event_bus.publish, call:len, func:handler(payload: InstanceEventPayload) → None, call:received.append | dep: asyncio, uuid, collections.abc, typing, pytest, fastapi.testclient, sqlalchemy, sqlalchemy.ext.asyncio, src.api, src.auth.session, src.config, src.models.git_repository, src.models.instance_event, src.models.project, src.models.tool_instance, src.models.tool_type, src.services.event_bus, src.api.events, src.services.lifecycle_hooks, fastapi +- test_git_control.py | Unit tests for git utility functions including repository status, branch operations, and commit handling | exp: class:TestGitStatus, method:test_clean_repo(self, temp_repo), call:get_status, call:isinstance, call:len, method:test_modified_file(self, temp_repo), call:open, call:os.path.join, call:f.write, call:get_status, method:test_untracked_file(self, temp_repo), call:open, call:os.path.join, call:f.write, call:get_status, class:TestBranchOperations, method:test_create_branch(self, temp_repo), call:get_current_branch, call:create_branch, call:get_status, method:test_checkout_branch(self, temp_repo), call:get_current_branch, call:create_branch, call:checkout_branch, method:test_delete_branch(self, temp_repo), call:get_current_branch, call:create_branch, call:delete_branch, method:test_get_current_branch(self, temp_repo), call:get_current_branch, class:TestCommit, method:test_commit_changes(self, temp_repo), call:open, call:os.path.join, call:f.write, call:commit_changes, call:get_status, method:test_commit_all_changes(self, temp_repo), call:open, call:os.path.join, call:f.write, call:commit_changes, call:get_status, call:len, func:temp_repo(), call:tempfile.TemporaryDirectory, call:os.system, call:open, call:os.path.join, call:f.write, func:test_get_current_branch_handles_unborn_main() → None, call:tempfile.TemporaryDirectory, call:os.system, call:get_current_branch, func:test_create_branch_on_bare_repo_with_no_commits() → None, call:tempfile.TemporaryDirectory, call:os.system, call:create_branch, call:get_current_branch, func:test_checkout_branch_on_bare_repo_with_no_commits() → None, call:tempfile.TemporaryDirectory, call:os.system, call:checkout_branch, call:get_current_branch | dep: os, tempfile, pytest, src.utils.git_control +- test_models.py | Integration tests for SQLAlchemy model definitions, verifying table registration, column schemas, relationships, and database operations | exp: func:test_base_metadata_collects_declared_tables() → None, call:isinstance, func:test_shared_mixins_define_expected_columns() → None, func:test_expected_tables_are_registered() → None, call:set, func:test_user_table_has_required_columns() → None, call:set, call:columns.keys, func:test_project_relationships_point_to_owner_and_default_ssh_key() → None, call:next, call:iter, func:test_repository_and_user_config_relationships_are_registered() → None, call:next, call:iter, func:test_async_session_can_insert_and_load_user(db_session: AsyncSession) → None, call:User, call:db_session.add, call:db_session.commit, call:db_session.refresh, call:db_session.get | dep: pytest, sqlalchemy.ext.asyncio, src.models, src.models.base, src.models.git_repository, src.models.project, src.models.ssh_key, src.models.user, src.models.user_config, src.models (Base, mixins, GitRepository, Project, SSHKey, User, UserConfig) +- test_notifications_api.py | Integration tests for a notifications REST API covering authentication, CRUD operations, pagination, and user-scoped access control. | exp: func:notification_service() → NotificationService, call:NotificationService, func:user_a(db_session: AsyncSession) → User, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, func:user_b(db_session: AsyncSession) → User, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, func:_mint_cookie_for_user(test_client: TestClient, user_id: uuid.UUID) → None, call:Settings, call:create_session_cookie, call:str, call:test_client.cookies.set, func:test_list_requires_auth(test_client: TestClient) → None, call:test_client.get, func:test_list_returns_only_own_notifications(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:notification_service.create_notification, call:asyncio.run, call:create_notifications, call:_mint_cookie_for_user, call:authenticated_client.get, call:response.json, call:len, func:create_notifications() → None, call:notification_service.create_notification, func:test_list_pagination(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:range, call:notification_service.create_notification, call:datetime.now, call:timedelta, call:db_session.commit, call:db_session.refresh, call:asyncio.run, call:create_many, call:_mint_cookie_for_user, call:authenticated_client.get, call:response.json, call:len, func:create_many() → None, call:range, call:notification_service.create_notification, call:datetime.now, call:timedelta, call:db_session.commit, call:db_session.refresh, func:test_unread_count_endpoint(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:range, call:notification_service.create_notification, call:asyncio.run, call:create_unread, call:_mint_cookie_for_user, call:authenticated_client.get, call:response.json, func:create_unread() → None, call:range, call:notification_service.create_notification, func:test_mark_read_endpoint(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:asyncio.run, call:create_and_get, call:_mint_cookie_for_user, call:authenticated_client.patch, call:response.json, func:create_and_get() → uuid.UUID, call:notification_service.create_notification, func:test_mark_read_404_for_other_user(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:notification_service.create_notification, call:asyncio.run, call:create_and_get, call:_mint_cookie_for_user, call:authenticated_client.patch, func:create_and_get() → uuid.UUID, call:notification_service.create_notification, func:test_mark_all_read_endpoint(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:range, call:notification_service.create_notification, call:asyncio.run, call:create_unread, call:_mint_cookie_for_user, call:authenticated_client.post, call:response.json, func:create_unread() → None, call:range, call:notification_service.create_notification, func:test_dismiss_endpoint(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:asyncio.run, call:create_and_get, call:_mint_cookie_for_user, call:authenticated_client.delete, call:authenticated_client.get, call:response.json, call:len, func:create_and_get() → uuid.UUID, call:notification_service.create_notification, func:test_dismiss_404_for_other_user(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:notification_service.create_notification, call:asyncio.run, call:create_and_get, call:_mint_cookie_for_user, call:authenticated_client.delete, func:create_and_get() → uuid.UUID, call:notification_service.create_notification, func:test_mute_categories_filter_in_list(authenticated_client: TestClient, db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:UserConfig, call:db_session.add, call:db_session.commit, call:notification_service.create_notification, call:asyncio.run, call:setup, call:_mint_cookie_for_user, call:authenticated_client.get, call:response.json, call:len, func:setup() → None, call:UserConfig, call:db_session.add, call:db_session.commit, call:notification_service.create_notification | dep: uuid, datetime, pytest, fastapi.testclient, sqlalchemy.ext.asyncio, src.models.user, src.models.user_config, src.services.notification_service, src.auth.session, src.config, asyncio, fastapi, sqlalchemy +- test_notifications_lifecycle.py | Integration tests verifying that tool instance lifecycle events and health monitor checks correctly create (or skip) notifications with proper ownership, severity, and error resilience. | exp: func:event_bus() → Generator[InstanceEventBus, None, None], call:InstanceEventBus, call:bus._reset_for_testing, func:test_instance(db_session: AsyncSession) → ToolInstance, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, call:Project, call:GitRepository, call:ToolType, call:db_session.add_all, call:ToolInstance, func:test_lifecycle_started_intermediate_skips_notification(db_session: AsyncSession, event_bus: InstanceEventBus, test_instance: ToolInstance) → None, call:received.append, call:event_bus.subscribe, call:publish_lifecycle_event, call:len, call:db_session.execute, call:select(Notification).where, call:list, call:result.scalars().all, func:subscriber(payload: InstanceEventPayload) → None, call:received.append, func:test_lifecycle_running_creates_notification(db_session: AsyncSession, event_bus: InstanceEventBus, test_instance: ToolInstance) → None, call:publish_lifecycle_event, call:db_session.execute, call:select(Notification).where, call:list, call:result.scalars().all, call:len, func:test_health_monitor_error_creates_notification(db_session: AsyncSession, event_bus: InstanceEventBus, test_instance: ToolInstance) → None, call:HealthMonitor, call:received.append, call:event_bus.subscribe, call:patch, call:monitor._check_instance, call:len, call:db_session.execute, call:select(Notification).where, call:list, call:result.scalars().all, func:subscriber(payload: InstanceEventPayload) → None, call:received.append, func:test_notification_failure_does_not_block_event_pipeline(db_session: AsyncSession, event_bus: InstanceEventBus, test_instance: ToolInstance) → None, call:received.append, call:event_bus.subscribe, call:patch, call:RuntimeError, call:publish_lifecycle_event, call:len, call:db_session.execute, call:select(Notification).where, call:result.scalar_one_or_none, func:subscriber(payload: InstanceEventPayload) → None, call:received.append, func:test_notification_ownership_matches_instance_owner(db_session: AsyncSession, event_bus: InstanceEventBus) → None, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, call:Project, call:GitRepository, call:ToolType, call:db_session.add_all, call:ToolInstance, call:publish_lifecycle_event, call:db_session.execute, call:select(Notification).where, call:result.scalar_one, func:test_lifecycle_error_creates_error_notification(db_session: AsyncSession, event_bus: InstanceEventBus, test_instance: ToolInstance) → None, call:publish_lifecycle_event, call:db_session.execute, call:select(Notification).where, call:result.scalar_one, func:test_health_monitor_unhealthy_creates_warning_notification(db_session: AsyncSession, event_bus: InstanceEventBus, test_instance: ToolInstance) → None, call:HealthMonitor, call:HealthSnapshot, call:patch, call:monitor._check_instance, call:db_session.execute, call:select(Notification).where, call:result.scalar_one | dep: uuid, collections.abc, unittest.mock, pytest, pytest_asyncio, sqlalchemy, sqlalchemy.ext.asyncio, src.models.git_repository, src.models.notification, src.models.project, src.models.tool_instance, src.models.tool_type, src.models.user, src.services.event_bus, src.services.health_monitor, src.services.lifecycle_hooks +- test_projects_api.py | Integration tests for a FastAPI projects API endpoint covering authentication, CRUD operations, and ownership-based access control. | exp: func:_prepare_test_db() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, func:_load_app(), call:hasattr, call:asyncio.run, call:database_module.engine.dispose, call:importlib.reload, func:_mint_token(user_id: str) → str, call:Settings, call:create_session_cookie, call:datetime.now, call:timedelta, func:_insert_user(user_id: str, email) → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, func:_insert_project(project_id: str, owner_id: str, name) → None, call:create_async_engine, call:build_database_url, call:async_sessionmaker, call:session_factory, call:Project, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:async_sessionmaker, call:session_factory, call:Project, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, func:test_create_project_requires_authentication() → None, call:_prepare_test_db, call:_load_app, call:TestClient, call:client.post, func:test_create_project_successfully() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.post, call:response.json, func:test_list_projects_returns_only_owned_projects() → None, call:_prepare_test_db, call:_insert_user, call:_insert_project, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.get, call:response.json, call:len, func:test_update_project_requires_ownership() → None, call:_prepare_test_db, call:_insert_user, call:_insert_project, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.patch, func:test_update_project_successfully() → None, call:_prepare_test_db, call:_insert_user, call:_insert_project, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.patch, call:response.json, func:test_delete_project_requires_ownership() → None, call:_prepare_test_db, call:_insert_user, call:_insert_project, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.delete, func:test_delete_project_successfully() → None, call:_prepare_test_db, call:_insert_user, call:_insert_project, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.delete, func:test_set_default_ssh_key_requires_ownership() → None, call:_prepare_test_db, call:_insert_user, call:_insert_project, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.patch | dep: uuid, datetime, asyncio, pytest, fastapi.testclient, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.session, src.config, src.models, src.models.project, src.models.user, importlib, fastapi, src.database, src.api.auth, src.api.projects, src.main +- test_seed.py | Tests deterministic seed user generation and database seeding functionality for development environments. | exp: func:test_build_seed_user_returns_deterministic_payload() → None, call:build_seed_user, func:test_seed_database_creates_development_user(db_session: AsyncSession) → None, call:seed_database, call:db_session.scalar, call:select(User).where | dep: pytest, sqlalchemy, sqlalchemy.ext.asyncio, src.models.user, src.scripts.seed +- test_ssh_keys_api.py | Integration tests for SSH keys API endpoints verifying authentication requirements | exp: func:async_client(), call:AsyncClient, func:test_create_ssh_key_requires_authentication(async_client: AsyncClient) → None, call:async_client.post, func:test_list_ssh_keys_requires_authentication(async_client: AsyncClient) → None, call:async_client.get | dep: pytest, httpx, src.main +- test_tool_types_api.py | Integration tests for a FastAPI tool types REST API endpoint covering CRUD operations, authentication, and validation rules | exp: func:_prepare_test_db() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, func:_load_app(), call:hasattr, call:asyncio.run, call:database_module.engine.dispose, call:importlib.reload, func:_mint_token(user_id: str) → str, call:Settings, call:create_session_cookie, call:datetime.now, call:timedelta, func:_insert_user(user_id: str, email) → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, func:_insert_tool_type(tool_type_id: str, name: str, display_name: str, compose_template: str, created_by_id) → None, call:create_async_engine, call:build_database_url, call:async_sessionmaker, call:session_factory, call:ToolType, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:async_sessionmaker, call:session_factory, call:ToolType, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, func:test_list_tool_types_requires_authentication() → None, call:_prepare_test_db, call:_load_app, call:TestClient, call:client.get, func:test_list_tool_types_returns_all_types() → None, call:_prepare_test_db, call:_insert_user, call:_insert_tool_type, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.get, call:response.json, call:len, call:next, func:test_get_tool_type_by_id() → None, call:_prepare_test_db, call:_insert_user, call:_insert_tool_type, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.get, call:response.json, func:test_get_tool_type_not_found() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.get, func:test_create_tool_type_successfully() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.post, call:response.json, func:test_create_tool_type_duplicate_name() → None, call:_prepare_test_db, call:_insert_user, call:_insert_tool_type, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.post, func:test_create_tool_type_invalid_yaml() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.post, func:test_create_tool_type_missing_services() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.post, func:test_create_tool_type_missing_required_variable() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.post, func:test_update_tool_type_successfully() → None, call:_prepare_test_db, call:_insert_user, call:_insert_tool_type, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.put, call:response.json, func:test_update_tool_type_not_found() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.put, func:test_delete_tool_type_successfully() → None, call:_prepare_test_db, call:_insert_user, call:_insert_tool_type, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.delete, call:client.get, func:test_delete_tool_type_not_found() → None, call:_prepare_test_db, call:_insert_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_mint_token, call:client.delete | dep: uuid, datetime, asyncio, pytest, fastapi.testclient, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.session, src.config, src.models, src.models.tool_type, src.models.user, importlib, fastapi, src.database, src.api.auth, src.api.tool_types, src.main +- test_tool_types_api_extended.py | Integration tests for a FastAPI tool types API endpoint covering CRUD operations with extended fields including dockerfile templates, compose templates, readiness probes, startup commands, and validation logic. | exp: class:TestToolTypesAPIExtended, method:test_create_tool_type_with_dockerfile(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_create_tool_type_with_readiness_probe(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_create_tool_type_invalid_definition_type(self, authenticated_client: TestClient) → None, call:authenticated_client.post, method:test_create_tool_type_dockerfile_without_template(self, authenticated_client: TestClient) → None, call:authenticated_client.post, method:test_update_tool_type_with_new_fields(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.put, call:response.json, method:test_validate_tool_type_compose(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_validate_tool_type_invalid_compose(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_validate_tool_type_dockerfile(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_get_tool_type_returns_new_fields(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.get, call:response.json, method:test_create_tool_type_without_port_fails(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, call:str, method:test_create_tool_type_with_port_mismatch_fails(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_create_tool_type_with_startup_command(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:response.json, method:test_update_tool_type_startup_command(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.put, call:response.json, method:test_get_tool_type_returns_startup_command(self, authenticated_client: TestClient) → None, call:authenticated_client.post, call:create_response.json, call:authenticated_client.get, call:response.json, call:str | dep: pytest, fastapi.testclient, fastapi.testclient.TestClient +- test_users_api.py | Integration tests for user profile API endpoints including get, update, and avatar upload with authentication and validation | exp: func:_prepare_users_test_db() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:connection.execute, call:text, call:engine.dispose, func:_load_app(), call:importlib.reload, func:_insert_test_user(user_id: str) → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, call:asyncio.run, call:_run, func:_run() → None, call:create_async_engine, call:build_database_url, call:engine.begin, call:connection.run_sync, call:async_sessionmaker, call:session_factory, call:User, call:uuid.UUID, call:session.merge, call:session.commit, call:engine.dispose, func:_create_auth_cookie(user_id: str) → str, call:Settings, call:create_session_cookie, call:datetime.now, call:timedelta, func:test_get_profile_returns_401_without_cookie() → None, call:_prepare_users_test_db, call:_load_app, call:TestClient, call:client.get, func:test_get_profile_returns_user_data() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.get, call:response.json, func:test_update_profile_changes_name_and_email() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.put, call:response.json, func:test_update_profile_rejects_empty_name() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.put, func:test_update_profile_rejects_invalid_email() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.put, func:test_upload_avatar_updates_avatar_url() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.post, call:io.BytesIO, call:response.json, call:data["avatar_url"].startswith, func:test_upload_avatar_rejects_invalid_file_type() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.post, call:io.BytesIO, func:test_upload_avatar_rejects_oversized_file() → None, call:_prepare_users_test_db, call:_insert_test_user, call:_load_app, call:TestClient, call:client.cookies.set, call:_create_auth_cookie, call:client.post, call:io.BytesIO | dep: uuid, datetime, asyncio, io, fastapi.testclient, pytest, sqlalchemy, sqlalchemy.ext.asyncio, src.auth.session, src.config, src.models, src.models.user, importlib, fastapi, src.database, src.api.users, src.main +- test_workspaces_api.py | Integration tests for FastAPI workspace API endpoints covering CRUD, sync, and deletion operations with mocked services. | exp: class:TestListWorkspaces, method:test_list_empty(self, authenticated_client: TestClient, test_repo: GitRepository), call:authenticated_client.get, call:response.json, method:test_list_with_workspaces(self, authenticated_client: TestClient, db_session: AsyncSession, test_repo: GitRepository), call:Workspace, call:db_session.add, call:db_session.commit, call:asyncio.run, call:_commit, call:authenticated_client.get, call:response.json, call:len, class:TestCreateWorkspace, method:test_create_success(self, authenticated_client: TestClient, test_repo: GitRepository), call:Workspace, call:uuid.uuid4, call:patch.object, call:authenticated_client.post, call:response.json, call:mock_create.assert_called_once, method:test_create_missing_name(self, authenticated_client: TestClient, test_repo: GitRepository), call:authenticated_client.post, call:response.json, method:test_create_duplicate_name(self, authenticated_client: TestClient, db_session: AsyncSession, test_repo: GitRepository), call:Workspace, call:db_session.add, call:db_session.commit, call:asyncio.run, call:_commit, call:patch.object, call:Exception, call:authenticated_client.post, class:TestDeleteWorkspace, method:test_delete_without_instances(self, authenticated_client: TestClient, db_session: AsyncSession, test_repo: GitRepository), call:Workspace, call:db_session.add, call:db_session.commit, call:db_session.refresh, call:asyncio.run, call:_commit_refresh, call:patch.object, call:authenticated_client.delete, call:response.json, method:test_delete_with_instances_force(self, authenticated_client: TestClient, db_session: AsyncSession, test_repo: GitRepository), call:Workspace, call:db_session.add, call:db_session.commit, call:db_session.refresh, call:asyncio.run, call:_commit_refresh, call:patch.object, call:authenticated_client.delete, class:TestSyncWorkspace, method:test_sync_success(self, authenticated_client: TestClient, db_session: AsyncSession, test_repo: GitRepository), call:Workspace, call:db_session.add, call:db_session.commit, call:db_session.refresh, call:asyncio.run, call:_commit_refresh, call:patch.object, call:MagicMock, call:authenticated_client.post, call:response.json, method:test_sync_branch_deleted(self, authenticated_client: TestClient, db_session: AsyncSession, test_repo: GitRepository), call:Workspace, call:db_session.add, call:db_session.commit, call:db_session.refresh, call:asyncio.run, call:_commit_refresh, call:patch.object, call:MagicMock, call:authenticated_client.post, call:response.json, func:_get_user_id_from_client(client: TestClient) → uuid.UUID, call:Settings, call:client.cookies.get, call:decode_session_cookie, call:uuid.UUID, raise:RuntimeError, func:test_repo(db_session: AsyncSession, authenticated_client: TestClient), call:_get_user_id_from_client, call:Project, call:db_session.add, call:db_session.flush, call:GitRepository, call:db_session.commit, call:db_session.refresh, call:asyncio.run, call:_create, func:_create(), call:Project, call:db_session.add, call:db_session.flush, call:GitRepository, call:db_session.commit, call:db_session.refresh | dep: asyncio, uuid, unittest.mock, pytest, fastapi.testclient, sqlalchemy.ext.asyncio, src.models.git_repository, src.models.project, src.models.tool_instance, src.models.tool_type, src.models.workspace, src.services.workspace_manager, src.auth.session, src.config, fastapi, sqlalchemy, src.models +## arch +Test pyramid with integration tests dominating; uses FastAPI TestClient, real SQLAlchemy database sessions, session cookie authentication, pub/sub event bus mocking, and service-layer mocking for external dependencies (git, SSH, workspaces). +## tags +test, call:, call:authenticated, user, call:db, call:create, create, call:response.json +## symbols +- TestConfigProfilesAPI +- TestGitStatus +- TestBranchOperations +- TestCommit +- TestToolTypesAPIExtended +- TestListWorkspaces +- TestCreateWorkspace +- TestDeleteWorkspace +## workflows +- change integration behavior + read: __init__.py, test_auth_api.py, test_auth_services.py +- change integration config + read: test_config_profiles_api.py +## dirty +- diff --git a/apps/api/tests/services/.pi-map.index.md b/apps/api/tests/services/.pi-map.index.md new file mode 100644 index 0000000..ab0912e --- /dev/null +++ b/apps/api/tests/services/.pi-map.index.md @@ -0,0 +1,20 @@ +# apps/api/tests/services (index) +dir: apps/api/tests/services + +## role +Unit tests for verifying TerminalManager's multi-session terminal lifecycle and resource management capabilities. +## parent +index: apps/api/tests/.pi-map.index.md +map: apps/api/tests/.pi-map.md +## children +- +## files +- test_terminal_manager_multi.py +## links +index: apps/api/tests/services/.pi-map.index.md +map: apps/api/tests/services/.pi-map.md +## workflows +- change services behavior + read: test_terminal_manager_multi.py +## dirty +- diff --git a/apps/api/tests/services/.pi-map.md b/apps/api/tests/services/.pi-map.md new file mode 100644 index 0000000..47e9d08 --- /dev/null +++ b/apps/api/tests/services/.pi-map.md @@ -0,0 +1,27 @@ +# apps/api/tests/services +dir: apps/api/tests/services + +index: apps/api/tests/services/.pi-map.index.md + +## role +Unit tests for verifying TerminalManager's multi-session terminal lifecycle and resource management capabilities. +## files +- test_terminal_manager_multi.py | Unit tests for TerminalManager's multi-session support including session creation limits, instance filtering, websocket attachment behavior, default session handling, and idle cleanup. | exp: class:FakeWebSocket, method:__init__(self, name) → None, method:close(self, code, reason) → None, method:send_bytes(self, data: bytes) → None, call:self._sent.append, func:manager() → TerminalManager, call:TerminalManager, call:tm._idle_check_task.done, call:tm._idle_check_task.cancel, func:mock_terminal_session(monkeypatch) → None, call:__import__("time").time, call:monkeypatch.setattr, func:fake_start(self), call:__import__("time").time, func:instance_id() → uuid.UUID, call:uuid.uuid4, func:test_create_session_increases_count(manager: TerminalManager, mock_terminal_session, instance_id: uuid.UUID) → None, call:len, call:manager.get_sessions_for_instance, call:str, call:manager.create_session, func:test_create_session_enforces_max_5(manager: TerminalManager, mock_terminal_session, instance_id: uuid.UUID) → None, call:range, call:manager.create_session, call:len, call:manager.get_sessions_for_instance, call:str, call:pytest.raises, func:test_get_sessions_for_instance_filters_by_instance(manager: TerminalManager, mock_terminal_session) → None, call:uuid.uuid4, call:manager.create_session, call:len, call:manager.get_sessions_for_instance, call:str, func:test_close_session_removes_from_dict(manager: TerminalManager, mock_terminal_session, instance_id: uuid.UUID) → None, call:manager.create_session, call:manager.get_session, call:str, call:patch.object, call:AsyncMock, call:manager.close_session, call:asyncio.sleep, call:mock_mark.assert_called_once_with, func:test_attach_websocket_only_closes_same_session(manager: TerminalManager, mock_terminal_session, instance_id: uuid.UUID) → None, call:manager.create_session, call:FakeWebSocket, call:session_a.attach_websocket, call:session_b.attach_websocket, call:manager.attach_websocket, func:test_default_session_keyed_separately(manager: TerminalManager, mock_terminal_session, instance_id: uuid.UUID) → None, call:manager.get_or_create_session, call:manager.create_session, call:manager.get_session, call:str, func:test_idle_cleanup_updates_db_status(manager: TerminalManager, mock_terminal_session, instance_id: uuid.UUID) → None, call:manager.create_session, call:patch.object, call:AsyncMock, call:manager._cleanup_idle_sessions, call:manager.get_session, call:str, call:mock_mark.assert_called_once_with | dep: asyncio, uuid, unittest.mock, pytest, src.services.terminal_manager, src.services.terminal_session +## arch +Pytest-based test suite using fixture mocking for async service dependencies and parameterized scenarios for session limit boundary testing. +## tags +session, test, call:manager.get, call:manager.create, instance, call:str, sessions, websocket +## symbols +- FakeWebSocket +- __init__ +- close +- send_bytes +- manager +- mock_terminal_session +- fake_start +- instance_id +## workflows +- change services behavior + read: test_terminal_manager_multi.py +## dirty +- diff --git a/apps/api/tests/system/.pi-map.index.md b/apps/api/tests/system/.pi-map.index.md new file mode 100644 index 0000000..6bebdf7 --- /dev/null +++ b/apps/api/tests/system/.pi-map.index.md @@ -0,0 +1,20 @@ +# apps/api/tests/system (index) +dir: apps/api/tests/system + +## role +System-level integration test suite for the API application. +## parent +index: apps/api/tests/.pi-map.index.md +map: apps/api/tests/.pi-map.md +## children +- +## files +- __init__.py +## links +index: apps/api/tests/system/.pi-map.index.md +map: apps/api/tests/system/.pi-map.md +## workflows +- change system behavior + read: __init__.py +## dirty +- diff --git a/apps/api/tests/system/.pi-map.md b/apps/api/tests/system/.pi-map.md new file mode 100644 index 0000000..2fb398d --- /dev/null +++ b/apps/api/tests/system/.pi-map.md @@ -0,0 +1,20 @@ +# apps/api/tests/system +dir: apps/api/tests/system + +index: apps/api/tests/system/.pi-map.index.md + +## role +System-level integration test suite for the API application. +## files +- __init__.py | Empty file with no functionality +## arch +Minimal test package structure with placeholder initialization, following Python package conventions for future test module organization. +## tags +init, empty, functionality +## symbols +- +## workflows +- change system behavior + read: __init__.py +## dirty +- diff --git a/apps/api/tests/unit/.pi-map.index.md b/apps/api/tests/unit/.pi-map.index.md new file mode 100644 index 0000000..0b61dff --- /dev/null +++ b/apps/api/tests/unit/.pi-map.index.md @@ -0,0 +1,47 @@ +# apps/api/tests/unit (index) +dir: apps/api/tests/unit + +## role +Unit test suite for the API backend, covering configuration, Docker services, git operations, file handling, health monitoring, notifications, permissions, and lifecycle management. +## parent +index: apps/api/tests/.pi-map.index.md +map: apps/api/tests/.pi-map.md +## children +- +## files +- __init__.py +- test_config.py +- test_config_profile_resolver.py +- test_docker_build.py +- test_docker_service.py +- test_event_bus.py +- test_file_service.py +- test_git_mount_resolution.py +- test_git_mounts.py +- test_git_repository_clone_preflight.py +- test_git_repository_working_clones.py +- test_git_service.py +- test_git_url_parser.py +- test_health_monitor.py +- test_home_path_expansion.py +- test_lifecycle_hooks.py +- test_manifest_compiler.py +- test_migration_metadata.py +- test_monitoring_models.py +- test_notification_service.py +- test_notifications_api_routes.py +- test_permission_fixer.py +- test_readiness_probe.py +- test_session_branch_selection.py +- test_ssh_keys.py +- test_tool_instances_legacy.py +## links +index: apps/api/tests/unit/.pi-map.index.md +map: apps/api/tests/unit/.pi-map.md +## workflows +- change unit behavior + read: __init__.py, test_config.py, test_config_profile_resolver.py +- change unit config + read: test_config.py, test_config_profile_resolver.py +## dirty +- diff --git a/apps/api/tests/unit/.pi-map.md b/apps/api/tests/unit/.pi-map.md new file mode 100644 index 0000000..d2e3561 --- /dev/null +++ b/apps/api/tests/unit/.pi-map.md @@ -0,0 +1,54 @@ +# apps/api/tests/unit +dir: apps/api/tests/unit + +index: apps/api/tests/unit/.pi-map.index.md + +## role +Unit test suite for the API backend, covering configuration, Docker services, git operations, file handling, health monitoring, notifications, permissions, and lifecycle management. +## files +- __init__.py | Empty file with no functionality +- test_config.py | Unit tests for application configuration settings, database URL construction, and environment-specific behavior | exp: func:test_settings_default_database_url_uses_asyncpg() → None, call:Settings, func:test_build_database_url_uses_explicit_values() → None, call:build_database_url, func:test_settings_prefers_explicit_database_url_env(monkeypatch) → None, call:monkeypatch.setenv, call:Settings, func:test_auth_settings_have_secure_defaults() → None, call:Settings, call:settings.resolved_authentik_authorize_url.endswith, call:settings.resolved_authentik_token_url.endswith, call:settings.resolved_authentik_jwks_url.endswith, func:test_cookie_policy_is_strict_in_production(monkeypatch) → None, call:monkeypatch.setenv, call:Settings, func:test_cookie_policy_is_relaxed_for_local_dev(monkeypatch) → None, call:monkeypatch.setenv, call:Settings | dep: pytest, src.config, src.database +- test_config_profile_resolver.py | Unit tests for configuration profile resolution, including merge functions, profile inheritance with includes, cycle detection, and git mount normalization. | exp: class:TestMergeFunctions, method:test_merge_env_vars_basic(self) → None, call:_merge_env_vars, method:test_merge_env_vars_tracks_overrides(self) → None, call:_merge_env_vars, method:test_merge_runtime_hints_basic(self) → None, call:_merge_runtime_hints, method:test_merge_files_basic(self) → None, call:_merge_files, method:test_merge_mounts_basic(self) → None, call:_merge_mounts, method:test_merge_mounts_file_override(self) → None, call:_merge_mounts, call:ResolvedMount, method:test_merge_mounts_mode_conflict(self) → None, call:_merge_mounts, call:ResolvedMount, method:test_merge_git_mounts_basic(self) → None, call:_merge_git_mounts, call:len, method:test_merge_git_mounts_concatenate_same_repo_branch(self) → None, call:_merge_git_mounts, call:len, method:test_merge_git_mounts_dedup_same_mapping(self) → None, call:_merge_git_mounts, call:len, method:test_merge_git_mounts_different_repos(self) → None, call:_merge_git_mounts, call:len, method:test_merge_git_mounts_different_branches(self) → None, call:_merge_git_mounts, call:len, call:m.get, class:TestResolveProfile, class:TestApplyResolvedProfile, method:test_mounts_individual_files_not_directory(self, tmp_path) → None, call:ResolvedProfile, call:uuid.uuid4, call:ResolvedMount, call:apply_resolved_profile, call:str, call:len, method:test_file_mount_preserves_sibling_files(self, tmp_path) → None, call:ResolvedProfile, call:uuid.uuid4, call:ResolvedMount, call:apply_resolved_profile, call:str, call:len, call:volumes[0]["source"].endswith, method:test_empty_mount_produces_no_volumes(self, tmp_path) → None, call:ResolvedProfile, call:uuid.uuid4, call:ResolvedMount, call:apply_resolved_profile, call:str, method:test_home_expansion_in_file_mount_target(self, tmp_path) → None, call:ResolvedProfile, call:uuid.uuid4, call:ResolvedMount, call:apply_resolved_profile, call:str, class:TestCheckIncludeCycle | dep: uuid, pytest, sqlalchemy.ext.asyncio, src.models.config_profile, src.services.config_profile_resolver +- test_docker_build.py | Unit tests for a Docker image build service that validates successful builds, failures, command structure, file writing, context handling, path traversal prevention, timeouts, and exceptions. | exp: class:TestBuildImage | dep: subprocess, tempfile, pathlib, unittest.mock, pytest, src.services.docker_build +- test_docker_service.py | Unit tests for Docker service utility functions including container ID/name retrieval and volume sorting by mount specificity. | exp: class:TestGetContainerId, class:TestGetContainerName, class:TestSortVolumesBySpecificity, method:test_parent_before_child(self) → None, call:sort_volumes_by_specificity, method:test_stable_sort_for_equal_depth(self) → None, call:sort_volumes_by_specificity, method:test_with_type_suffix(self) → None, call:sort_volumes_by_specificity, method:test_empty_list(self) → None, call:sort_volumes_by_specificity, method:test_single_volume(self) → None, call:sort_volumes_by_specificity, method:test_duplicate_target_warning(self, caplog) → None, call:caplog.at_level, call:sort_volumes_by_specificity | dep: unittest.mock, logging, src.services.docker, subprocess +- test_event_bus.py | Unit tests for InstanceEventBus verifying publish/subscribe behavior, exception isolation, unsubscribe functionality, and async callback support | exp: func:event_bus() → InstanceEventBus, call:InstanceEventBus, call:bus._reset_for_testing, func:sample_payload() → InstanceEventPayload, call:str, call:uuid.uuid4, func:test_publish_delivers_to_all_subscribers(event_bus: InstanceEventBus, sample_payload: InstanceEventPayload) → None, call:received.append, call:event_bus.subscribe, call:event_bus.publish, call:len, func:callback_1(payload: InstanceEventPayload) → None, call:received.append, func:callback_2(payload: InstanceEventPayload) → None, call:received.append, func:callback_3(payload: InstanceEventPayload) → None, call:received.append, func:test_subscriber_exception_isolation(event_bus: InstanceEventBus, sample_payload: InstanceEventPayload) → None, call:received.append, call:event_bus.subscribe, call:event_bus.publish, raise:RuntimeError, func:bad_callback(_payload: InstanceEventPayload) → None, raise:RuntimeError, func:good_callback(_payload: InstanceEventPayload) → None, call:received.append, func:test_unsubscribe_removes_callback(event_bus: InstanceEventBus, sample_payload: InstanceEventPayload) → None, call:received.append, call:event_bus.subscribe, call:unsubscribe, call:event_bus.publish, func:callback(_payload: InstanceEventPayload) → None, call:received.append, func:test_publish_to_empty_subscriber_list(event_bus: InstanceEventBus, sample_payload: InstanceEventPayload) → None, call:event_bus.publish, func:test_async_subscriber_supported(event_bus: InstanceEventBus, sample_payload: InstanceEventPayload) → None, call:asyncio.sleep, call:received.append, call:event_bus.subscribe, call:event_bus.publish, func:async_callback(_payload: InstanceEventPayload) → None, call:asyncio.sleep, call:received.append, func:test_unsubscribe_all_clears_subscribers(event_bus: InstanceEventBus, sample_payload: InstanceEventPayload) → None, call:received.append, call:event_bus.subscribe, call:event_bus.unsubscribe_all, call:event_bus.publish, func:callback(_payload: InstanceEventPayload) → None, call:received.append | dep: asyncio, uuid, typing, pytest, src.services.event_bus +- test_file_service.py | Unit tests for FileService validating directory listing, file read/write, binary rejection, and path traversal prevention. | exp: class:TestFileService, method:test_list_directory_empty(self, temp_workspace: Workspace), call:FileService, call:service.list_directory, method:test_list_directory_with_files(self, temp_workspace: Workspace), call:os.makedirs, call:os.path.join, call:open, call:f.write, call:FileService, call:service.list_directory, call:len, method:test_read_file(self, temp_workspace: Workspace), call:open, call:os.path.join, call:f.write, call:FileService, call:service.read_file, method:test_read_binary_file_rejected(self, temp_workspace: Workspace), call:open, call:os.path.join, call:f.write, call:FileService, call:pytest.raises, call:service.read_file, method:test_write_file(self, temp_workspace: Workspace), call:FileService, call:service.write_file, call:os.path.exists, call:os.path.join, call:open, call:f.read, method:test_path_escapes_workspace(self, temp_workspace: Workspace), call:FileService, call:pytest.raises, call:service.list_directory, func:temp_workspace(), call:tempfile.TemporaryDirectory, call:Workspace | dep: os, tempfile, pytest, src.models.workspace, src.services.file_service +- test_git_mount_resolution.py | Unit tests for git mount resolution functions including glob expansion, branch checkout, and mount validation in tool instances. | exp: class:TestExpandGlobSource, method:test_no_glob_single_file(self, tmp_path: Path) → None, call:test_file.write_text, call:_expand_glob_source, call:str, call:len, method:test_no_glob_missing_file(self, tmp_path: Path) → None, call:_expand_glob_source, call:str, call:len, method:test_glob_pattern(self, tmp_path: Path) → None, call:(tmp_path / "file1.txt").write_text, call:(tmp_path / "file2.txt").write_text, call:(tmp_path / "other.py").write_text, call:_expand_glob_source, call:str, call:len, call:all, call:f.endswith, method:test_glob_recursive(self, tmp_path: Path) → None, call:subdir.mkdir, call:(subdir / "nested.txt").write_text, call:_expand_glob_source, call:str, call:len, method:test_glob_limit_enforced(self, tmp_path: Path) → None, call:range, call:(tmp_path / f"file{i}.txt").write_text, call:_expand_glob_source, call:str, call:len, method:test_glob_escapes_repo(self, tmp_path: Path) → None, call:other_dir.mkdir, call:(other_dir / "outside.txt").write_text, call:_expand_glob_source, call:str, call:all, call:r.startswith, class:TestCheckoutBranch, method:test_checkout_existing_branch(self, tmp_path: Path) → None, call:os.system, call:(tmp_path / "file.txt").write_text, call:_checkout_branch, call:str, call:os.popen(f"cd {tmp_path} && git branch --show-current").read().strip, method:test_checkout_nonexistent_branch(self, tmp_path: Path) → None, call:os.system, call:(tmp_path / "file.txt").write_text, call:_checkout_branch, call:str, class:TestResolveSingleGitMount | dep: os, pathlib, pytest, src.api.tool_instances, pathlib.Path +- test_git_mounts.py | Unit tests for git mount resolution functions that handle multi-mapping support, normalization, glob expansion, and Docker volume bind mounting. | exp: class:TestNormalizeGitMount, method:test_legacy_to_mappings(self) → None, call:_normalize_git_mount, method:test_already_mappings(self) → None, call:_normalize_git_mount, method:test_missing_target_path_no_mappings(self) → None, call:_normalize_git_mount, class:TestResolveGitMountMappings, method:test_single_mapping(self) → None, call:tempfile.TemporaryDirectory, call:os.makedirs, call:os.path.join, call:_resolve_git_mount_mappings, call:len, method:test_multiple_mappings(self) → None, call:tempfile.TemporaryDirectory, call:os.makedirs, call:os.path.join, call:_resolve_git_mount_mappings, call:len, method:test_relative_target_path(self) → None, call:tempfile.TemporaryDirectory, call:os.makedirs, call:os.path.join, call:_resolve_git_mount_mappings, call:len, method:test_glob_expansion(self) → None, call:tempfile.TemporaryDirectory, call:os.makedirs, call:os.path.join, call:_resolve_git_mount_mappings, call:len, method:test_missing_target_path_skipped(self) → None, call:tempfile.TemporaryDirectory, call:_resolve_git_mount_mappings, call:len, method:test_no_working_directory_for_relative_target(self) → None, call:tempfile.TemporaryDirectory, call:os.makedirs, call:os.path.join, call:_resolve_git_mount_mappings, call:len, class:TestResolveSingleGitMount, class:TestExpandGlobSource, method:test_no_glob(self) → None, call:tempfile.TemporaryDirectory, call:os.path.join, call:open(path, "w").close, call:_expand_glob_source, method:test_no_glob_missing(self) → None, call:tempfile.TemporaryDirectory, call:os.path.join, call:_expand_glob_source, method:test_glob_pattern(self) → None, call:tempfile.TemporaryDirectory, call:open(os.path.join(tmp, "a.txt"), "w").close, call:os.path.join, call:open(os.path.join(tmp, "b.txt"), "w").close, call:_expand_glob_source, call:len | dep: os, tempfile, unittest.mock, pytest, src.api.tool_instances +- test_git_repository_clone_preflight.py | Unit tests for git repository clone URL building and preflight accessibility checks | exp: func:test_build_provider_clone_url_uses_fixed_host() → None, call:_build_provider_clone_url, func:test_preflight_remote_repository_allows_accessible_repo() → None, call:Mock, call:patch, call:_preflight_remote_repository, call:run_mock.assert_called_once, func:test_preflight_remote_repository_rejects_missing_repo() → None, call:Mock, call:patch, call:pytest.raises, call:_preflight_remote_repository | dep: unittest.mock, pytest, fastapi, src.api.git_repositories, subprocess +- test_git_repository_working_clones.py | Tests git repository cloning and initialization utilities with fallback strategies for different git versions | exp: func:test_clone_working_repository_uses_normal_clone() → None, call:Mock, call:patch, call:_clone_working_repository, call:run_mock.assert_called_once, func:test_clone_working_repository_raises_on_failure() → None, call:Mock, call:patch, call:pytest.raises, call:_clone_working_repository, func:test_init_working_repository_prefers_init_b() → None, call:Mock, call:patch, call:_init_working_repository, func:test_init_working_repository_falls_back_to_symbolic_ref() → None, call:Mock, call:patch, call:_init_working_repository, func:test_create_branch_uses_orphan_checkout_when_head_is_unborn() → None, call:patch, call:create_branch, raise:RuntimeError, func:mock_run(repo_path: str, *args: str) → str, raise:RuntimeError | dep: unittest.mock, pytest, fastapi, src.api.git_repositories, src.utils.git_control, subprocess +- test_git_service.py | Unit tests for GitService class covering clone, fetch, pull, and branch_exists_remotely operations with mocked subprocess calls. | exp: class:TestGitServiceClone, class:TestGitServiceFetch, class:TestGitServicePull, class:TestGitServiceBranchExistsRemotely, method:test_branch_exists(self), call:MagicMock, call:patch, call:GitService.branch_exists_remotely, call:mock_run.assert_called_once_with, method:test_branch_not_exists(self), call:MagicMock, call:patch, call:GitService.branch_exists_remotely, method:test_ls_remote_fails(self), call:MagicMock, call:patch, call:GitService.branch_exists_remotely | dep: asyncio, unittest.mock, pytest, src.services.git_service +- test_git_url_parser.py | Tests for git URL parsing utilities that extract base repository URLs, validate clone URLs, and parse various git URL formats across GitHub, GitLab, and Bitbucket. | exp: class:TestExtractBaseRepoUrl, method:test_github_tree_url(self), call:extract_base_repo_url, method:test_github_blob_url(self), call:extract_base_repo_url, method:test_github_pull_url(self), call:extract_base_repo_url, method:test_github_issues_url(self), call:extract_base_repo_url, method:test_github_valid_url(self), call:extract_base_repo_url, method:test_github_url_with_query_params(self), call:extract_base_repo_url, method:test_gitlab_tree_url(self), call:extract_base_repo_url, method:test_gitlab_blob_url(self), call:extract_base_repo_url, method:test_gitlab_merge_request_url(self), call:extract_base_repo_url, method:test_gitlab_valid_url(self), call:extract_base_repo_url, method:test_bitbucket_src_url(self), call:extract_base_repo_url, method:test_bitbucket_valid_url(self), call:extract_base_repo_url, method:test_ssh_url(self), call:extract_base_repo_url, method:test_ssh_url_without_git_suffix(self), call:extract_base_repo_url, method:test_invalid_url(self), call:extract_base_repo_url, method:test_empty_url(self), call:extract_base_repo_url, class:TestIsValidCloneUrl, method:test_valid_ssh_url(self), call:is_valid_clone_url, method:test_valid_https_url(self), call:is_valid_clone_url, method:test_browser_url(self), call:is_valid_clone_url, method:test_url_without_git_suffix(self), call:is_valid_clone_url, method:test_invalid_url(self), call:is_valid_clone_url, class:TestParseGitUrl, method:test_valid_git_url(self), call:parse_git_url, method:test_browser_url(self), call:parse_git_url, method:test_invalid_url(self), call:parse_git_url, method:test_empty_url(self), call:parse_git_url, method:test_ssh_url(self), call:parse_git_url | dep: src.utils.git_url_parser, pytest +- test_health_monitor.py | Unit tests for HealthMonitor's state-transition logic covering container crashes, tunnel failures, recovery detection, deduplication, exception resilience, and lifecycle management. | exp: func:event_bus() → InstanceEventBus, call:InstanceEventBus, call:bus._reset_for_testing, func:health_monitor(event_bus: InstanceEventBus) → HealthMonitor, call:HealthMonitor, func:_create_running_instance(db_session) → ToolInstance, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, call:ToolInstance, func:test_detects_container_crash(db_session, event_bus: InstanceEventBus, health_monitor: HealthMonitor) → None, call:_create_running_instance, call:events_captured.append, call:event_bus.subscribe, call:patch, call:health_monitor._check_instance, call:db_session.refresh, call:len, call:db_session.execute, call:select(HealthCheck).where, call:result.scalar_one, func:capture_event(payload: InstanceEventPayload) → None, call:events_captured.append, func:test_detects_tunnel_failure(db_session, event_bus: InstanceEventBus, health_monitor: HealthMonitor) → None, call:_create_running_instance, call:events_captured.append, call:event_bus.subscribe, call:patch, call:health_monitor._check_instance, call:db_session.refresh, call:len, call:db_session.execute, call:select(HealthCheck).where, call:result.scalar_one, func:capture_event(payload: InstanceEventPayload) → None, call:events_captured.append, func:test_detects_recovery(db_session, event_bus: InstanceEventBus, health_monitor: HealthMonitor) → None, call:_create_running_instance, call:db_session.commit, call:HealthSnapshot, call:events_captured.append, call:event_bus.subscribe, call:patch, call:health_monitor._check_instance, call:db_session.refresh, call:len, call:db_session.execute, call:select(HealthCheck).where, call:result.scalar_one, func:capture_event(payload: InstanceEventPayload) → None, call:events_captured.append, func:test_skips_writes_when_no_state_change(db_session, event_bus: InstanceEventBus, health_monitor: HealthMonitor) → None, call:_create_running_instance, call:patch, call:health_monitor._check_instance, call:db_session.execute, call:select(HealthCheck).where, call:len, call:result.scalars().all, func:test_docker_exception_resilience(db_session, event_bus: InstanceEventBus, health_monitor: HealthMonitor) → None, call:_create_running_instance, call:events_captured.append, call:event_bus.subscribe, call:patch, call:RuntimeError, call:health_monitor._check_instance, call:db_session.execute, call:select(HealthCheck).where, call:result.scalar_one_or_none, func:capture_event(payload: InstanceEventPayload) → None, call:events_captured.append, func:test_monitor_start_stop(health_monitor: HealthMonitor) → None, call:health_monitor.start, call:task.done, call:health_monitor.stop, call:suppress, call:task.cancelled | dep: asyncio, uuid, contextlib, unittest.mock, pytest, sqlalchemy, src.models.health_check, src.models.tool_instance, src.models.user, src.services.event_bus, src.services.health_monitor +- test_home_path_expansion.py | Unit tests for tilde and $HOME expansion in container paths across three helper functions. | exp: class:TestExpandContainerPath, method:test_tilde_slash_expands(self) → None, call:expand_container_path, method:test_tilde_alone_expands(self) → None, call:expand_container_path, method:test_dollar_home_slash_expands(self) → None, call:expand_container_path, method:test_dollar_home_alone_expands(self) → None, call:expand_container_path, method:test_absolute_path_unchanged(self) → None, call:expand_container_path, method:test_relative_path_unchanged(self) → None, call:expand_container_path, method:test_tilde_in_middle_unchanged(self) → None, call:expand_container_path, method:test_dollar_home_in_middle_unchanged(self) → None, call:expand_container_path, method:test_root_home(self) → None, call:expand_container_path, class:TestGetManifestHomeDir, method:test_with_user_block(self) → None, call:get_manifest_home_dir, method:test_without_user_block(self) → None, call:get_manifest_home_dir, method:test_with_empty_user_name(self) → None, call:get_manifest_home_dir, method:test_with_none_user_name(self) → None, call:get_manifest_home_dir, class:TestResolveGitMountMappingsExpansion, method:test_tilde_target_expansion(self, tmp_path) → None, call:(tmp_path / "src").mkdir, call:_resolve_git_mount_mappings, call:str, call:len, method:test_dollar_home_target_expansion(self, tmp_path) → None, call:(tmp_path / "src").mkdir, call:_resolve_git_mount_mappings, call:str, call:len, method:test_absolute_target_unchanged(self, tmp_path) → None, call:(tmp_path / "src").mkdir, call:_resolve_git_mount_mappings, call:str, call:len | dep: pytest, src.api.tool_instances, src.services.config_profile_resolver, src.services.manifest_compiler +- test_lifecycle_hooks.py | Unit tests for lifecycle hook helper functions that derive notification titles and determine whether events should trigger notifications based on event type and status. | exp: class:TestDeriveTitle, method:test_known_event_types(self) → None, call:_derive_title, method:test_unknown_event_type(self) → None, call:_derive_title, class:TestShouldNotify, method:test_error_events_are_notified(self) → None, call:_should_notify, method:test_health_changed_running_is_notified(self) → None, call:_should_notify, method:test_created_started_stopped_restarted_deleted_filtered(self) → None, call:_should_notify, method:test_health_changed_non_running_filtered(self) → None, call:_should_notify | dep: pytest, src.services.lifecycle_hooks +- test_manifest_compiler.py | Unit tests for a manifest compiler that generates Dockerfiles with user configuration and home directory setup | exp: func:test_compile_dockerfile_creates_config_dirs_for_user() → None, call:compile_dockerfile, func:test_compile_dockerfile_no_user_does_not_create_home() → None, call:compile_dockerfile | dep: pytest, src.services.build.manifest_compiler +- test_migration_metadata.py | Tests Alembic database migration files for correct table definitions and revision chain metadata | exp: func:test_initial_migration_defines_all_core_tables() → None, call:Path(__file__).resolve, call:spec_from_file_location, call:module_from_spec, call:spec.loader.exec_module, func:test_refresh_tokens_migration_has_expected_revision_chain() → None, call:Path(__file__).resolve, call:spec_from_file_location, call:module_from_spec, call:spec.loader.exec_module | dep: pytest, importlib.util, pathlib, pathlib.Path +- test_monitoring_models.py | Unit tests for monitoring models (InstanceEvent, HealthCheck) and their database persistence/querying. | exp: func:test_instance_event_creation(db_session) → None, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, call:ToolInstance, call:InstanceEvent, call:db_session.refresh, call:isinstance, func:test_health_check_creation(db_session) → None, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, call:ToolInstance, call:HealthCheck, call:db_session.refresh, call:isinstance, func:test_instance_event_query_by_instance(db_session) → None, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, call:ToolInstance, call:InstanceEvent, call:db_session.execute, call:select(InstanceEvent).where, call:result.scalar_one | dep: uuid, datetime, pytest, sqlalchemy, src.models.health_check, src.models.instance_event, src.models.tool_instance, src.models.user +- test_notification_service.py | Unit tests for NotificationService covering CRUD operations, filtering, ownership validation, and bulk actions on user notifications. | exp: func:notification_service() → NotificationService, call:NotificationService, func:user_a(db_session: AsyncSession) → User, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, func:user_b(db_session: AsyncSession) → User, call:User, call:uuid.uuid4, call:db_session.add, call:db_session.commit, func:test_create_notification(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:uuid.uuid4, func:test_list_notifications_orders_by_created_at_desc(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:datetime.now, call:timedelta, call:db_session.commit, call:db_session.refresh, call:notification_service.list_notifications, func:test_list_notifications_excludes_dismissed(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:notification_service.dismiss, call:notification_service.list_notifications, func:test_list_notifications_unread_only(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:notification_service.mark_read, call:notification_service.list_notifications, func:test_get_unread_count(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:range, call:notification_service.create_notification, call:notification_service.mark_read, call:notification_service.get_unread_count, func:test_mark_read_sets_read_at(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:notification_service.mark_read, func:test_mark_all_read_affects_all_unread(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:range, call:notification_service.create_notification, call:notification_service.mark_all_read, call:notification_service.get_unread_count, func:test_dismiss_sets_dismissed_at(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:notification_service.dismiss, call:db_session.execute, call:select(Notification).where, call:result.scalar_one, func:test_mark_read_wrong_owner_raises(db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:notification_service.create_notification, call:pytest.raises, call:notification_service.mark_read, func:test_dismiss_wrong_owner_raises(db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:notification_service.create_notification, call:pytest.raises, call:notification_service.dismiss, func:test_list_notifications_mute_categories(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:notification_service.list_notifications, func:test_get_unread_count_excludes_dismissed(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:notification_service.create_notification, call:notification_service.dismiss, call:notification_service.get_unread_count, func:test_dismiss_all_affects_all_non_dismissed(db_session: AsyncSession, notification_service: NotificationService, user_a: User) → None, call:range, call:notification_service.create_notification, call:notification_service.dismiss_all, call:notification_service.list_notifications, func:test_dismiss_all_affects_only_caller(db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:range, call:notification_service.create_notification, call:notification_service.dismiss_all, call:notification_service.list_notifications, func:test_mark_all_read_affects_only_caller(db_session: AsyncSession, notification_service: NotificationService, user_a: User, user_b: User) → None, call:range, call:notification_service.create_notification, call:notification_service.mark_all_read, call:notification_service.get_unread_count | dep: uuid, datetime, pytest, sqlalchemy, sqlalchemy.ext.asyncio, src.models.notification, src.models.user, src.services.notification_service +- test_notifications_api_routes.py | Tests that FastAPI notification routes are declared in correct order so bulk DELETE /notifications matches before parameterized DELETE /notifications/{id} | exp: func:test_delete_notifications_route_order() → None, call:FastAPI, call:app.include_router, call:TestClient, call:client.delete | dep: fastapi, fastapi.testclient, src.api.notifications +- test_permission_fixer.py | Unit tests for a Docker container permission fixer service that applies chown/chmod/file_mode to mounts and SSH directories. | exp: class:TestApplyMountPermissions, class:TestRunInContainer, class:TestApplySshPermissions, class:TestCheckRootUserAvailable | dep: unittest.mock, pytest, src.services.permission_fixer, subprocess +- test_readiness_probe.py | Unit tests for a Docker container readiness probe service that executes commands via docker exec with retry logic and timeout handling. | exp: class:TestExecuteProbe, class:TestIntegrationScenarios | dep: unittest.mock, src.services.readiness_probe, subprocess +- test_session_branch_selection.py | Tests session creation with branch selection and new branch creation via git operations and API request validation. | exp: class:TestCreateInstanceRequest, method:test_default_values(self), call:CreateInstanceRequest, method:test_clone_mode_with_branch(self), call:CreateInstanceRequest, method:test_new_branch_field(self), call:CreateInstanceRequest, class:TestBranchCreationInClone, method:test_create_local_branch_success(self), call:tempfile.TemporaryDirectory, call:subprocess.run, call:os.path.join, call:open, call:f.write, call:branches_result.stdout.strip, method:test_create_local_branch_invalid_name(self), call:tempfile.TemporaryDirectory, call:subprocess.run, call:os.path.join, call:open, call:f.write, class:TestCreateInstanceAPI, method:test_create_instance_request_validation(self), call:CreateInstanceRequest, method:test_create_instance_with_new_branch_sets_instance_branch(self) | dep: os, subprocess, tempfile, src.api.tool_instances, src.api.tool_instances.CreateInstanceRequest +- test_ssh_keys.py | Unit tests for SSH key preparation functionality that decrypts encrypted private keys and writes SSH key files with proper permissions and optional ownership. | exp: class:TestPrepareSshKeyFiles | dep: os, pathlib, unittest.mock, pytest, src.services.ssh_keys +- test_tool_instances_legacy.py | Unit tests verifying legacy tool instance fallback paths (dockerfile, compose, legacy definition types) continue using original startup flow after manifest-based flow introduction | exp: class:TestCreateInstanceDockerfileLegacy, class:TestCreateInstanceComposeLegacy, class:TestCreateInstanceManifestNotCalledForLegacy, class:TestStartInstanceLegacyFallback, class:TestStartInstanceSshPermissions, class:TestStartInstanceManifestBranch, func:fake_user_id() → uuid.UUID, call:uuid.uuid4, func:fake_project_id() → uuid.UUID, call:uuid.uuid4, func:fake_repo_id() → uuid.UUID, call:uuid.uuid4, func:fake_tool_type_id() → uuid.UUID, call:uuid.uuid4, func:fake_instance_id() → uuid.UUID, call:uuid.uuid4, func:mock_session(fake_user_id, fake_project_id, fake_repo_id, fake_tool_type_id), call:AsyncMock, call:User, call:MagicMock, call:GitRepository, call:getattr, call:datetime.now, func:_get(model, pk), func:_add(instance), call:getattr, call:datetime.now | dep: os, uuid, datetime, unittest.mock, pytest, src.api.tool_instances, src.models.git_repository, src.models.tool_instance, src.models.tool_type, src.models.ssh_key, src.models.user, fastapi +## arch +Pytest-based unit testing with heavy mocking of external dependencies (Docker, subprocess, git, filesystem), organized by service/component under test, using parameterized tests and fixture-based setup for isolated component verification. +## tags +test, url, call:, git, call:notification, instance, mount, call:len +## symbols +- TestMergeFunctions +- TestResolveProfile +- TestApplyResolvedProfile +- TestCheckIncludeCycle +- TestBuildImage +- TestGetContainerId +- TestGetContainerName +- TestSortVolumesBySpecificity +## workflows +- change unit behavior + read: __init__.py, test_config.py, test_config_profile_resolver.py +- change unit config + read: test_config.py, test_config_profile_resolver.py +## dirty +- diff --git a/apps/api/uploads/.pi-map.index.md b/apps/api/uploads/.pi-map.index.md new file mode 100644 index 0000000..b90056b --- /dev/null +++ b/apps/api/uploads/.pi-map.index.md @@ -0,0 +1,20 @@ +# apps/api/uploads (index) +dir: apps/api/uploads + +## role +Handles file upload processing, storage, and management for the API application. +## parent +index: apps/api/.pi-map.index.md +map: apps/api/.pi-map.md +## children +- apps/api/uploads/avatars + index: apps/api/uploads/avatars/.pi-map.index.md + map: apps/api/uploads/avatars/.pi-map.md +## files +## links +index: apps/api/uploads/.pi-map.index.md +map: apps/api/uploads/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/api/uploads/.pi-map.md b/apps/api/uploads/.pi-map.md new file mode 100644 index 0000000..c309865 --- /dev/null +++ b/apps/api/uploads/.pi-map.md @@ -0,0 +1,18 @@ +# apps/api/uploads +dir: apps/api/uploads + +index: apps/api/uploads/.pi-map.index.md + +## role +Handles file upload processing, storage, and management for the API application. +## files +## arch +Modular service-oriented architecture with dedicated modules for different upload types (avatars, documents, images), using NestJS controllers/services with S3/cloud storage integration, file validation, and database persistence for upload metadata. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/api/uploads/avatars/.pi-map.index.md b/apps/api/uploads/avatars/.pi-map.index.md new file mode 100644 index 0000000..c4c8912 --- /dev/null +++ b/apps/api/uploads/avatars/.pi-map.index.md @@ -0,0 +1,22 @@ +# apps/api/uploads/avatars (index) +dir: apps/api/uploads/avatars + +## role +Storage directory for user avatar image files uploaded through the API. +## parent +index: apps/api/uploads/.pi-map.index.md +map: apps/api/uploads/.pi-map.md +## children +- +## files +- 30d2810a-cb00-4065-8e5d-c7d32a0b55c9.png +- b342b640-d3c1-488d-bdba-0e2890d6c363.png +- da1c3121-20d7-400c-8c94-507a9d890810.png +- ee9fdd89-0dcc-4f46-9ad8-01f4ff93720d.png +## links +index: apps/api/uploads/avatars/.pi-map.index.md +map: apps/api/uploads/avatars/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/api/uploads/avatars/.pi-map.md b/apps/api/uploads/avatars/.pi-map.md new file mode 100644 index 0000000..9b0c6b7 --- /dev/null +++ b/apps/api/uploads/avatars/.pi-map.md @@ -0,0 +1,22 @@ +# apps/api/uploads/avatars +dir: apps/api/uploads/avatars + +index: apps/api/uploads/avatars/.pi-map.index.md + +## role +Storage directory for user avatar image files uploaded through the API. +## files +- 30d2810a-cb00-4065-8e5d-c7d32a0b55c9.png | Binary file +- b342b640-d3c1-488d-bdba-0e2890d6c363.png | Binary file +- da1c3121-20d7-400c-8c94-507a9d890810.png | Binary file +- ee9fdd89-0dcc-4f46-9ad8-01f4ff93720d.png | Binary file +## arch +Simple flat file storage using UUID-named PNG files with no subdirectory organization or metadata indexing. +## tags +binary, 30d2810a, cb00, 4065, 8e5d, c7d32a0b55c9, b342b640, d3c1 +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/web/.pi-map.index.md b/apps/web/.pi-map.index.md new file mode 100644 index 0000000..e30ec98 --- /dev/null +++ b/apps/web/.pi-map.index.md @@ -0,0 +1,40 @@ +# apps/web (index) +dir: apps/web + +## role +Browser-based web frontend providing the user-facing React application for code editing, terminal access, and routing functionality. +## parent +index: apps/.pi-map.index.md +map: apps/.pi-map.md +## children +- apps/web/.pi-lens + index: apps/web/.pi-lens/.pi-map.index.md + map: apps/web/.pi-lens/.pi-map.md +- apps/web/public + index: apps/web/public/.pi-map.index.md + map: apps/web/public/.pi-map.md +- apps/web/src + index: apps/web/src/.pi-map.index.md + map: apps/web/src/.pi-map.md +## files +- .env.example +- .eslintrc.cjs +- Dockerfile +- index.html +- nginx.conf +- package-lock.json +- package.json +- tsconfig.json +- vite.config.ts +## links +index: apps/web/.pi-map.index.md +map: apps/web/.pi-map.md +## workflows +- change web behavior + read: .env.example, .eslintrc.cjs, Dockerfile +- change web config + read: package-lock.json, package.json, tsconfig.json +- explore web subdirectories + index: apps/web/.pi-lens/.pi-map.index.md, apps/web/public/.pi-map.index.md, apps/web/src/.pi-map.index.md +## dirty +- diff --git a/apps/web/.pi-map.md b/apps/web/.pi-map.md new file mode 100644 index 0000000..58708ac --- /dev/null +++ b/apps/web/.pi-map.md @@ -0,0 +1,32 @@ +# apps/web +dir: apps/web + +index: apps/web/.pi-map.index.md + +## role +Browser-based web frontend providing the user-facing React application for code editing, terminal access, and routing functionality. +## files +- .env.example | Template file defining example environment variables for frontend API and application URL configuration +- .eslintrc.cjs | Configures ESLint for a TypeScript browser project with modern ECMAScript module support | dep: @typescript-eslint/parser, @typescript-eslint/eslint-plugin, eslint +- Dockerfile | Multi-stage Docker build for a Node.js/Vite frontend application served by nginx with non-root user security | dep: node:20-alpine, nginx:alpine, npm, wget +- index.html | Standard HTML entry point for a React/Vite application that loads a TypeScript root component | dep: Google Fonts (Inter, IBM Plex Mono), main.tsx entry module +- nginx.conf | Configures nginx as a web server for a single-page application with optimized caching, compression, and client-side routing support. | dep: nginx +- package-lock.json | Records exact dependency versions and resolved URLs for reproducible npm package installation in the "headquarter-web" React project. | dep: npm, @phosphor-icons/react, @types/prismjs, axios, prismjs, react, react-dom, react-router-dom, react-simple-code-editor, tailwindcss, xterm, xterm-addon-fit, xterm-addon-web-links, xterm-addon-webgl, @testing-library/jest-dom, @testing-library/react, @types/react, @types/react-dom, @typescript-eslint/eslint-plugin, @typescript-eslint/parser, @vitejs/plugin-react, autoprefixer, eslint, jsdom, postcss, typescript, vite, vitest, @babel/core, @babel/runtime +- package.json | Configuration file for a React-based web application named "headquarter-web" built with Vite and TypeScript, featuring code editing, terminal, and routing capabilities. | dep: react, react-dom, react-router-dom, vite, typescript, tailwindcss, axios, prismjs, xterm, @phosphor-icons/react, react-simple-code-editor, vitest, eslint +- tsconfig.json | TypeScript configuration file for a React project using Vite with modern ES2020 target and bundler module resolution | dep: typescript, react, vite +- vite.config.ts | Configures Vite build tool for a React project with custom dev server port and Vitest test settings. | dep: vite, @vitejs/plugin-react +## arch +Modern React SPA built with Vite and TypeScript, containerized via multi-stage Docker/nginx deployment with client-side routing and optimized static asset delivery. +## tags +react, eslint, vite, typescript, dom, application, nginx, web +## symbols +- +## workflows +- change web behavior + read: .env.example, .eslintrc.cjs, Dockerfile +- change web config + read: package-lock.json, package.json, tsconfig.json +- explore web subdirectories + index: apps/web/.pi-lens/.pi-map.index.md, apps/web/public/.pi-map.index.md, apps/web/src/.pi-map.index.md +## dirty +- diff --git a/apps/web/public/.pi-map.index.md b/apps/web/public/.pi-map.index.md new file mode 100644 index 0000000..0a9b1b8 --- /dev/null +++ b/apps/web/public/.pi-map.index.md @@ -0,0 +1,19 @@ +# apps/web/public (index) +dir: apps/web/public + +## role +Static HTML prototype for UI/UX validation and stakeholder review of the workspace dashboard design before React implementation. +## parent +index: apps/web/.pi-map.index.md +map: apps/web/.pi-map.md +## children +- +## files +- preview.html +## links +index: apps/web/public/.pi-map.index.md +map: apps/web/public/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/web/public/.pi-map.md b/apps/web/public/.pi-map.md new file mode 100644 index 0000000..c2f80d1 --- /dev/null +++ b/apps/web/public/.pi-map.md @@ -0,0 +1,19 @@ +# apps/web/public +dir: apps/web/public + +index: apps/web/public/.pi-map.index.md + +## role +Static HTML prototype for UI/UX validation and stakeholder review of the workspace dashboard design before React implementation. +## files +- preview.html | Static HTML/CSS UI mockup for a "Headquarter" workspace dashboard with interactive page preview switching between Home, Projects, and Settings views. | dep: Google Fonts (Inter, IBM Plex Mono) +## arch +Vanilla HTML/CSS mockup with JavaScript-driven view switching, using CSS Grid/Flexbox layout and class-based DOM manipulation for interactive state transitions. +## tags +preview, static, html, css, mockup, headquarter, workspace, dashboard +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/web/src/.pi-map.index.md b/apps/web/src/.pi-map.index.md new file mode 100644 index 0000000..70409a3 --- /dev/null +++ b/apps/web/src/.pi-map.index.md @@ -0,0 +1,50 @@ +# apps/web/src (index) +dir: apps/web/src + +## role +Frontend web application entry point and core infrastructure for a React-based single-page application with authentication, routing, and domain type definitions. +## parent +index: apps/web/.pi-map.index.md +map: apps/web/.pi-map.md +## children +- apps/web/src/api + index: apps/web/src/api/.pi-map.index.md + map: apps/web/src/api/.pi-map.md +- apps/web/src/components + index: apps/web/src/components/.pi-map.index.md + map: apps/web/src/components/.pi-map.md +- apps/web/src/hooks + index: apps/web/src/hooks/.pi-map.index.md + map: apps/web/src/hooks/.pi-map.md +- apps/web/src/pages + index: apps/web/src/pages/.pi-map.index.md + map: apps/web/src/pages/.pi-map.md +- apps/web/src/state + index: apps/web/src/state/.pi-map.index.md + map: apps/web/src/state/.pi-map.md +- apps/web/src/styles + index: apps/web/src/styles/.pi-map.index.md + map: apps/web/src/styles/.pi-map.md +- apps/web/src/test + index: apps/web/src/test/.pi-map.index.md + map: apps/web/src/test/.pi-map.md +- apps/web/src/types + index: apps/web/src/types/.pi-map.index.md + map: apps/web/src/types/.pi-map.md +- apps/web/src/utils + index: apps/web/src/utils/.pi-map.index.md + map: apps/web/src/utils/.pi-map.md +## files +- main.tsx +- router.tsx +- types.ts +## links +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## workflows +- change src behavior + read: main.tsx, router.tsx, types.ts +- explore src subdirectories + index: apps/web/src/api/.pi-map.index.md, apps/web/src/components/.pi-map.index.md, apps/web/src/hooks/.pi-map.index.md +## dirty +- diff --git a/apps/web/src/.pi-map.md b/apps/web/src/.pi-map.md new file mode 100644 index 0000000..e7bab6b --- /dev/null +++ b/apps/web/src/.pi-map.md @@ -0,0 +1,30 @@ +# apps/web/src +dir: apps/web/src + +index: apps/web/src/.pi-map.index.md + +## role +Frontend web application entry point and core infrastructure for a React-based single-page application with authentication, routing, and domain type definitions. +## files +- main.tsx | Entry point that bootstraps a React SPA with routing, authentication, and session management context providers. | dep: react, react-dom/client, react-router-dom, ./router, ./state/auth, ./state/sessions, ./styles/tokens.css, ./styles/global.css, ./styles/utilities.css, ./styles/syntax-highlight.css, ./styles/pages/git-history.css, ./styles/pages/repo-workspace.css, ./styles/pages/projects.css, ./styles/pages/sessions.css, ./styles/pages/ssh-keys.css, ./styles/pages/workspace-detail.css, ./styles/pages/workspaces.css, react-dom, ./styles/* +- router.tsx | Defines the React Router configuration for a web application with protected routes, nested layouts, and redirects. | exp: AppRouter | dep: react-router-dom, ./components/app-shell, ./components/protected-route, ./pages/DashboardPage, ./pages/PlaceholderPage, ./pages/ProfilePage, ./pages/ProjectsPage, ./pages/GitRepositoriesPage, ./pages/GitHistoryPage, ./pages/ProjectSettingsPage, ./pages/SettingsPage, ./pages/TerminalPage, ./pages/ToolWorkshopPage, ./pages/SshKeysPage, ./pages/ConfigProfilesPage, ./pages/SessionsPage, ./pages/WorkspacesPage, ./pages/WorkspaceDetailPage +- types.ts | Defines TypeScript type definitions for user sessions, projects, repositories, and workspaces in an application. | exp: SessionUser, SessionPayload, Project, WorkspaceSummary, RepositorySummary, ProjectWithRepos +## arch +Layered React SPA architecture using context providers for cross-cutting concerns (auth/session), declarative routing with protected route guards and nested layouts, and centralized TypeScript type definitions for domain models. +## tags +pages, styles, css, router, react, session, dom, workspace +## symbols +- AppRouter +- SessionUser +- SessionPayload +- Project +- WorkspaceSummary +- RepositorySummary +- ProjectWithRepos +## workflows +- change src behavior + read: main.tsx, router.tsx, types.ts +- explore src subdirectories + index: apps/web/src/api/.pi-map.index.md, apps/web/src/components/.pi-map.index.md, apps/web/src/hooks/.pi-map.index.md +## dirty +- diff --git a/apps/web/src/api/.pi-map.index.md b/apps/web/src/api/.pi-map.index.md new file mode 100644 index 0000000..15e3b95 --- /dev/null +++ b/apps/web/src/api/.pi-map.index.md @@ -0,0 +1,44 @@ +# apps/web/src/api (index) +dir: apps/web/src/api + +## role +Provides typed HTTP API client modules and interfaces for all backend communication in the web application, covering domains from authentication and user management to workspaces, tools, git, terminals, and real-time events. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- client.ts +- config-profiles.ts +- dashboard.ts +- events.ts +- git-repositories.ts +- notifications.ts +- profile.ts +- projects.ts +- sessions.ts +- settings.ts +- ssh-keys.ts +- terminal.ts +- tool-definitions.ts +- tool-types.test.ts +- tool-types.ts +- workspace-files.ts +- workspace-git.ts +- workspace-instances.ts +- workspaces.ts +## links +index: apps/web/src/api/.pi-map.index.md +map: apps/web/src/api/.pi-map.md +## workflows +- change api behavior + read: client.ts, config-profiles.ts, dashboard.ts +- update api tests + read: tool-types.test.ts +- change api CLI + read: client.ts +- change api config + read: config-profiles.ts +## dirty +- diff --git a/apps/web/src/api/.pi-map.md b/apps/web/src/api/.pi-map.md new file mode 100644 index 0000000..ec58c73 --- /dev/null +++ b/apps/web/src/api/.pi-map.md @@ -0,0 +1,51 @@ +# apps/web/src/api +dir: apps/web/src/api + +index: apps/web/src/api/.pi-map.index.md + +## role +Provides typed HTTP API client modules and interfaces for all backend communication in the web application, covering domains from authentication and user management to workspaces, tools, git, terminals, and real-time events. +## files +- client.ts | Configures an Axios HTTP client with automatic 401 redirect handling and exponential backoff retry logic for transient network/server errors. | exp: apiClient, shouldSkipAuthRedirect | dep: axios +- config-profiles.ts | Defines TypeScript interfaces and API client functions for managing configuration profiles with environment variables, mounts, git mounts, file inclusions, and profile resolution. | exp: ConfigProfile, ConfigProfileMount, GitMountMapping, GitMount, ConfigProfileInclude, ResolvedProfile, ResolvedMount, CreateConfigProfileRequest, UpdateConfigProfileRequest, UpdateIncludesRequest, listConfigProfiles, getConfigProfile, createConfigProfile, updateConfigProfile, deleteConfigProfile, updateProfileIncludes, previewConfigProfile, resolveDefaultProfile, ValidateGitUrlResponse, validateGitUrl | dep: ./client, client +- dashboard.ts | Defines a TypeScript type and API function to fetch dashboard summary data from a backend endpoint. | exp: DashboardSummary, getDashboardSummary | dep: ./client +- events.ts | Provides utilities for establishing a Server-Sent Events connection and checking the event stream endpoint status. | exp: func:createEventSource() → EventSource, func:probeEventStreamStatus() → Promise, call:setTimeout, call:controller.abort, call:fetch, call:clearTimeout +- git-repositories.ts | Provides a TypeScript API client module for managing Git repositories, branches, commits, and version control operations via HTTP endpoints. | exp: GitRepository, GitRepositoryCreate, URLParseResult, Branch, BranchesResponse, CommitHistoryEntry, CommitHistoryResponse, CommitDetail, GitStatus, CommitResponse, MergeResponse, func:parseGitUrl(url: string) → Promise, call:apiClient.post, func:listRepositories(projectId: string) → Promise, func:listAllUserRepositories() → Promise, func:createRepository(projectId: string, data: GitRepositoryCreate) → Promise, call:apiClient.post, func:createExternalRepository(data: GitRepositoryCreate) → Promise, func:deleteRepository(projectId: string, repoId: string) → Promise, call:apiClient.delete, func:updateRepositorySshKey(projectId: string, repoId: string, sshKeyId: string | null) → Promise, call:apiClient.patch, func:listRepositoryBranches(projectId: string, repoId: string) → Promise, call:apiClient.get, func:getRepositoryHistory(projectId: string, repoId: string, branch: string, limit: number) → Promise, call:searchParams.set, call:String, call:searchParams.toString, call:apiClient.get, func:getCommitDetail(projectId: string, repoId: string, commitHash: string) → Promise, call:apiClient.get, func:getRepositoryStatus(projectId: string, repoId: string) → Promise, call:apiClient.get, func:createBranch(projectId: string, repoId: string, name: string, baseBranch: string) → Promise<{ message: string; branch: string }>, call:apiClient.post, func:deleteBranch(projectId: string, repoId: string, branchName: string, force: boolean) → Promise<{ message: string }>, call:apiClient.delete, func:checkoutBranch(projectId: string, repoId: string, branch: string) → Promise<{ message: string; branch: string }>, call:apiClient.post, func:commitChanges(projectId: string, repoId: string, message: string, files: string[]) → Promise, call:apiClient.post, func:fetchRepository(projectId: string, repoId: string) → Promise<{ message: string }>, call:apiClient.post, func:pullRepository(projectId: string, repoId: string, branch: string) → Promise<{ message: string }>, call:apiClient.post, func:pushRepository(projectId: string, repoId: string, branch: string) → Promise<{ message: string }>, call:apiClient.post, func:mergeBranches(projectId: string, repoId: string, sourceBranch: string, targetBranch: string, message: string) → Promise, call:apiClient.post | dep: ./client, apiClient +- notifications.ts | Defines TypeScript interfaces and API client functions for fetching, reading, dismissing, and clearing user notifications. | exp: NotificationItem, NotificationListResponse, UnreadCountResponse, MarkAllReadResponse, ClearAllResponse, getNotifications, getUnreadCount, markNotificationRead, markAllNotificationsRead, dismissNotification, clearAllNotifications | dep: ./client, apiClient +- profile.ts | Provides API functions for fetching, updating, and uploading avatar for the current user's profile. | exp: UserProfile, ProfileUpdatePayload, getProfile, updateProfile, uploadAvatar | dep: ./client, ../types, apiClient, SessionUser +- projects.ts | Provides typed API functions for CRUD operations on projects via HTTP endpoints. | exp: ProjectCreateInput, ProjectUpdateInput, SetDefaultSSHKeyInput, listProjects, createProject, updateProject, deleteProject, setDefaultSSHKey | dep: ./client, ../types +- sessions.ts | Provides API client functions for managing cloud development tool instances and user sessions via REST endpoints. | exp: ToolInstance, Session, InstanceHealth, func:listInstances(projectId: string, repoId: string) → Promise, call:apiClient.get, func:createInstance(projectId: string, repoId: string, toolTypeId: string, displayName: string, cloneMode: string, branch: string, newBranch: string, configProfileId: string, sshKeyIds: string[], workspaceId: string) → Promise, call:apiClient.post, func:startInstance(projectId: string, repoId: string, instanceId: string, configProfileId: string, sshKeyIds: string[], retries) → Promise<{ status: string; url?: string }>, call:apiClient.post, call:setTimeout, call:startInstance, raise:error, func:stopInstance(projectId: string, repoId: string, instanceId: string) → Promise<{ status: string }>, call:apiClient.post, func:restartInstance(projectId: string, repoId: string, instanceId: string, configProfileId: string, sshKeyIds: string[], retries) → Promise<{ status: string; url?: string }>, call:apiClient.post, call:setTimeout, call:restartInstance, raise:error, func:deleteInstance(projectId: string, repoId: string, instanceId: string, force: boolean) → Promise, call:apiClient.delete, func:getInstance(projectId: string, repoId: string, instanceId: string) → Promise, call:apiClient.get, func:getUserSessions() → Promise, call:apiClient.get, func:checkInstanceHealth(projectId: string, repoId: string, instanceId: string) → Promise, call:apiClient.get, func:renameInstance(projectId: string, repoId: string, instanceId: string, displayName: string) → Promise<{ id: string; name: string; display_name: string }>, call:apiClient.patch, func:recreateInstanceTunnel(projectId: string, repoId: string, instanceId: string) → Promise<{ status: string; url?: string }>, call:apiClient.post | dep: axios, ./client +- settings.ts | Defines user configuration interfaces and API functions for fetching and updating user settings via HTTP requests. | exp: UserConfig, UserConfigUpdate, getUserConfig, updateUserConfig | dep: ./client, apiClient +- ssh-keys.ts | Provides a TypeScript API client for SSH key management operations including listing, creating, deleting, and cryptographic signing/verification. | exp: SSHKey, SSHKeyCreate, SignPayloadRequest, SignatureResponse, VerifySignatureRequest, VerifySignatureResponse, func:listSSHKeys() → Promise, func:createSSHKey(data: SSHKeyCreate) → Promise, func:deleteSSHKey(keyId: string) → Promise, call:apiClient.delete, func:signPayload(keyId: string, data: SignPayloadRequest) → Promise, func:verifySignature(keyId: string, data: VerifySignatureRequest) → Promise | dep: ./client, apiClient +- terminal.ts | Provides a TypeScript API client module for managing remote terminal sessions (CRUD operations) on cloud instances via REST endpoints. | exp: TerminalSession, TerminalSessionListResponse, TerminalSessionCreateRequest, TerminalSessionCreateResponse, func:listTerminalSessions(instanceId: string) → Promise, call:apiClient.get, func:createTerminalSession(instanceId: string, name: string) → Promise, call:apiClient.post, func:closeTerminalSession(instanceId: string, sessionId: string) → Promise<{ status: string; session_id: string }>, call:apiClient.delete, func:resetTerminalSession(instanceId: string, sessionId: string) → Promise<{ id: string; name: string; status: string }>, call:apiClient.post, func:renameTerminalSession(instanceId: string, sessionId: string, name: string) → Promise<{ id: string; name: string }>, call:apiClient.post | dep: ./client, client +- tool-definitions.ts | Defines TypeScript interfaces and API client functions for CRUD operations and compilation of tool definitions in a containerized tool management system. | exp: ToolDefinitionManifest, CreateToolDefinitionRequest, UpdateToolDefinitionRequest, CompileResult, listToolDefinitions, getToolDefinition, createToolDefinition, updateToolDefinition, deleteToolDefinition, compileToolDefinition | dep: ./client, apiClient +- tool-types.test.ts | Unit tests for tool type API operations including CRUD, validation, and field handling for dockerfile and compose definitions. | dep: vitest, ../api/tool-types, ../api/client +- tool-types.ts | Defines TypeScript interfaces and API client functions for CRUD operations on tool types in a containerized deployment system. | exp: ReadinessProbe, ToolType, CreateToolTypeRequest, UpdateToolTypeRequest, listToolTypes, getToolType, createToolType, updateToolType, deleteToolType, validateToolType | dep: ./client, apiClient +- workspace-files.ts | Provides an API client for listing, reading, and saving workspace files. | exp: FileEntry, func:listWorkspaceFiles(workspaceId: string, path: string) → Promise, func:getWorkspaceFileContent(workspaceId: string, path: string) → Promise, func:saveWorkspaceFile(workspaceId: string, path: string, content: string, commitMessage: string) → Promise, call:apiClient.post | dep: ./client, apiClient +- workspace-git.ts | Provides a typed API client for git operations on remote workspaces via HTTP endpoints. | exp: GitStatus, Commit, func:getGitStatus(workspaceId: string) → Promise, func:getGitBranches(workspaceId: string) → Promise<{ branches: string[]; current_branch: string }>, func:gitCommit(workspaceId: string, message: string) → Promise, call:apiClient.post, func:gitPush(workspaceId: string) → Promise, call:apiClient.post, func:gitPull(workspaceId: string) → Promise, call:apiClient.post, func:gitFetch(workspaceId: string) → Promise, call:apiClient.post, func:gitCheckout(workspaceId: string, branch: string) → Promise, call:apiClient.post, func:getGitHistory(workspaceId: string, path: string, limit: number) → Promise | dep: ./client +- workspace-instances.ts | Provides API client functions to list and create workspace tool instances. | exp: func:listWorkspaceInstances(workspaceId: string) → Promise, func:createWorkspaceInstance(workspaceId: string, toolTypeId: string, displayName: string, configProfileId: string) → Promise | dep: ./client, ./sessions +- workspaces.ts | Provides an API client wrapper for CRUD operations and sync functionality on workspaces via HTTP endpoints. | exp: func:listWorkspaces(projectId: string, repoId: string) → Promise, call:workspaceUrl, func:listAllWorkspaces() → Promise, func:createWorkspace(projectId: string, repoId: string, data: CreateWorkspaceRequest) → Promise, call:workspaceUrl, func:createWorkspaceTopLevel(data: CreateWorkspaceRequest & { repo_id: string }) → Promise, func:getWorkspace(projectId: string, repoId: string, workspaceId: string) → Promise, call:workspaceUrl, func:updateWorkspace(projectId: string, repoId: string, workspaceId: string, data: Partial) → Promise, call:workspaceUrl, func:deleteWorkspace(workspaceId: string, force) → Promise<{ status: string }>, func:syncWorkspace(projectId: string, repoId: string, workspaceId: string) → Promise, call:workspaceUrl | dep: ./client, ../types/workspace, apiClient, Workspace, CreateWorkspaceRequest, SyncResult +## arch +Modular facade pattern with a centralized Axios client instance (client.ts) featuring cross-cutting concerns (auth redirect, retry logic), with each domain exposing isolated typed API function modules that map to REST endpoints; includes SSE for real-time events and mirrors backend domain boundaries. +## tags +call:api, tool, client.post, create, git, profile, client, get +## symbols +- createEventSource +- probeEventStreamStatus +- parseGitUrl +- listRepositories +- listAllUserRepositories +- createRepository +- createExternalRepository +- deleteRepository +## workflows +- change api behavior + read: client.ts, config-profiles.ts, dashboard.ts +- update api tests + read: tool-types.test.ts +- change api CLI + read: client.ts +- change api config + read: config-profiles.ts +## dirty +- diff --git a/apps/web/src/components/.pi-map.index.md b/apps/web/src/components/.pi-map.index.md new file mode 100644 index 0000000..726cc8c --- /dev/null +++ b/apps/web/src/components/.pi-map.index.md @@ -0,0 +1,34 @@ +# apps/web/src/components (index) +dir: apps/web/src/components + +## role +Provides reusable, foundational React UI components and utilities for the web application, including layout shell, data visualization, navigation guards, and user feedback systems. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- apps/web/src/components/features + index: apps/web/src/components/features/.pi-map.index.md + map: apps/web/src/components/features/.pi-map.md +## files +- app-shell.tsx +- code-editor.tsx +- data-states.tsx +- icon.tsx +- protected-route.test.tsx +- protected-route.tsx +- syntax-highlighter.tsx +- toast-rules.test.ts +- toast-rules.ts +## links +index: apps/web/src/components/.pi-map.index.md +map: apps/web/src/components/.pi-map.md +## workflows +- change components behavior + read: app-shell.tsx, code-editor.tsx, data-states.tsx +- update components tests + read: protected-route.test.tsx, toast-rules.test.ts +- explore components subdirectories + index: apps/web/src/components/features/.pi-map.index.md +## dirty +- diff --git a/apps/web/src/components/.pi-map.md b/apps/web/src/components/.pi-map.md new file mode 100644 index 0000000..ac6a0bc --- /dev/null +++ b/apps/web/src/components/.pi-map.md @@ -0,0 +1,39 @@ +# apps/web/src/components +dir: apps/web/src/components + +index: apps/web/src/components/.pi-map.index.md + +## role +Provides reusable, foundational React UI components and utilities for the web application, including layout shell, data visualization, navigation guards, and user feedback systems. +## files +- app-shell.tsx | Renders the main application shell layout with navigation, session management, and responsive mobile/desktop views for a React Router-based app. | exp: AppShell | dep: react-router-dom, ../api/sessions, ../hooks/use-theme, ../state/auth, ../state/sessions, ../hooks/use-mobile-viewport, ../state/events, ../state/toast, ../state/notifications, ../state/session-operations, ./features/notification/event-toast-bridge, ./features/notification/notification-center, ./features/session/session-progress-panel, ./icon, ./features/mobile/mobile-nav, ./features/tool/start-tool-fab, ../utils/icons +- code-editor.tsx | A React component that renders a syntax-highlighted code editor with line numbers using react-simple-code-editor. | exp: CodeEditor | dep: react, react-simple-code-editor, ../utils/language +- data-states.tsx | Provides reusable React components for displaying loading, error, and empty data states in a UI. | exp: LoadingState, ErrorState, EmptyState | dep: ./icon, icon +- icon.tsx | Provides a centralized, type-safe React icon component that maps semantic names to Phosphor icons with configurable size, weight, color, and accessibility attributes. | exp: IconName, IconProps, Icon | dep: react, @phosphor-icons/react +- protected-route.test.tsx | Tests a ProtectedRoute component that guards content based on authentication state | dep: @testing-library/react, react-router-dom, vitest, ./protected-route +- protected-route.tsx | Conditionally renders children or redirects to login based on authentication state | exp: ProtectedRoute | dep: react-router-dom, ../state/auth +- syntax-highlighter.tsx | Renders syntax-highlighted code blocks with optional line numbers and copy-to-clipboard functionality | exp: SyntaxHighlighter | dep: react, ./icon, ../utils/language, React, icon, language (utils) +- toast-rules.test.ts | Unit tests for mapping instance events to toast notification categories and severities | dep: vitest, ./toast-rules, ../types/events +- toast-rules.ts | Maps instance events to toast notifications with deduplication logic to prevent spam | exp: func:mapEventToCategory(event: InstanceEventPayload) → string, call:event.event.startsWith, func:mapEventToSeverity(event: InstanceEventPayload) → "info" | "warning" | "error" | "success", func:handleEventToast(event: InstanceEventPayload) → void, call:shouldShowToast, call:toast.info, call:toast.success, call:toast.warning, call:toast.error, func:clearToastDedup() → void, call:lastToastTime.clear | dep: ../state/toast, ../types/events, toast state module, InstanceEventPayload type +## arch +Component-based architecture with functional React patterns, composition of specialized sub-components (icon, editor, syntax highlighter), separation of concerns via dedicated state-management components (data states, protected routes), and utility modules with pure logic for cross-cutting concerns (toast rules with deduplication). +## tags +toast, state, react, icon, code, event, editor, protected +## symbols +- mapEventToCategory +- mapEventToSeverity +- handleEventToast +- clearToastDedup +- AppShell +- CodeEditor +- LoadingState +- ErrorState +## workflows +- change components behavior + read: app-shell.tsx, code-editor.tsx, data-states.tsx +- update components tests + read: protected-route.test.tsx, toast-rules.test.ts +- explore components subdirectories + index: apps/web/src/components/features/.pi-map.index.md +## dirty +- diff --git a/apps/web/src/components/features/.pi-map.index.md b/apps/web/src/components/features/.pi-map.index.md new file mode 100644 index 0000000..ef721ff --- /dev/null +++ b/apps/web/src/components/features/.pi-map.index.md @@ -0,0 +1,53 @@ +# apps/web/src/components/features (index) +dir: apps/web/src/components/features + +## role +Contains reusable React components that implement specific product features and business logic for the web application. +## parent +index: apps/web/src/components/.pi-map.index.md +map: apps/web/src/components/.pi-map.md +## children +- apps/web/src/components/features/config-profiles + index: apps/web/src/components/features/config-profiles/.pi-map.index.md + map: apps/web/src/components/features/config-profiles/.pi-map.md +- apps/web/src/components/features/git + index: apps/web/src/components/features/git/.pi-map.index.md + map: apps/web/src/components/features/git/.pi-map.md +- apps/web/src/components/features/mobile + index: apps/web/src/components/features/mobile/.pi-map.index.md + map: apps/web/src/components/features/mobile/.pi-map.md +- apps/web/src/components/features/notification + index: apps/web/src/components/features/notification/.pi-map.index.md + map: apps/web/src/components/features/notification/.pi-map.md +- apps/web/src/components/features/project + index: apps/web/src/components/features/project/.pi-map.index.md + map: apps/web/src/components/features/project/.pi-map.md +- apps/web/src/components/features/session + index: apps/web/src/components/features/session/.pi-map.index.md + map: apps/web/src/components/features/session/.pi-map.md +- apps/web/src/components/features/settings + index: apps/web/src/components/features/settings/.pi-map.index.md + map: apps/web/src/components/features/settings/.pi-map.md +- apps/web/src/components/features/ssh-keys + index: apps/web/src/components/features/ssh-keys/.pi-map.index.md + map: apps/web/src/components/features/ssh-keys/.pi-map.md +- apps/web/src/components/features/terminal + index: apps/web/src/components/features/terminal/.pi-map.index.md + map: apps/web/src/components/features/terminal/.pi-map.md +- apps/web/src/components/features/tool + index: apps/web/src/components/features/tool/.pi-map.index.md + map: apps/web/src/components/features/tool/.pi-map.md +- apps/web/src/components/features/tool-workshop + index: apps/web/src/components/features/tool-workshop/.pi-map.index.md + map: apps/web/src/components/features/tool-workshop/.pi-map.md +- apps/web/src/components/features/workspace + index: apps/web/src/components/features/workspace/.pi-map.index.md + map: apps/web/src/components/features/workspace/.pi-map.md +## files +## links +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/web/src/components/features/.pi-map.md b/apps/web/src/components/features/.pi-map.md new file mode 100644 index 0000000..5593dd0 --- /dev/null +++ b/apps/web/src/components/features/.pi-map.md @@ -0,0 +1,18 @@ +# apps/web/src/components/features +dir: apps/web/src/components/features + +index: apps/web/src/components/features/.pi-map.index.md + +## role +Contains reusable React components that implement specific product features and business logic for the web application. +## files +## arch +Feature-based component organization with domain-specific UI building blocks, likely composed of atomic design elements (from components/ui) and consumed by page-level routes. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/web/src/components/features/config-profiles/.pi-map.index.md b/apps/web/src/components/features/config-profiles/.pi-map.index.md new file mode 100644 index 0000000..bfe6172 --- /dev/null +++ b/apps/web/src/components/features/config-profiles/.pi-map.index.md @@ -0,0 +1,22 @@ +# apps/web/src/components/features/config-profiles (index) +dir: apps/web/src/components/features/config-profiles + +## role +Provides a complete UI subsystem for managing configuration profiles through list, edit, and mobile-responsive views with CRUD operations. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- ConfigProfileEditorPanel.tsx +- ConfigProfileListSidebar.tsx +- ConfigProfilesMobileView.tsx +## links +index: apps/web/src/components/features/config-profiles/.pi-map.index.md +map: apps/web/src/components/features/config-profiles/.pi-map.md +## workflows +- change config-profiles behavior + read: ConfigProfileEditorPanel.tsx, ConfigProfileListSidebar.tsx, ConfigProfilesMobileView.tsx +## dirty +- diff --git a/apps/web/src/components/features/config-profiles/.pi-map.md b/apps/web/src/components/features/config-profiles/.pi-map.md new file mode 100644 index 0000000..900d9a2 --- /dev/null +++ b/apps/web/src/components/features/config-profiles/.pi-map.md @@ -0,0 +1,24 @@ +# apps/web/src/components/features/config-profiles +dir: apps/web/src/components/features/config-profiles + +index: apps/web/src/components/features/config-profiles/.pi-map.index.md + +## role +Provides a complete UI subsystem for managing configuration profiles through list, edit, and mobile-responsive views with CRUD operations. +## files +- ConfigProfileEditorPanel.tsx | React component that renders a form-based editor panel for creating and editing configuration profiles with support for includes, environment variables, runtime hints, files, and mounts. | exp: ConfigProfileEditorPanel | dep: ../../icon, ../git/git-mount-editor, ../../../api/config-profiles, ../../../types, ../../../api/tool-types, React, Icon, GitMountEditor, ConfigProfile, CreateConfigProfileRequest, ResolvedProfile, ProjectWithRepos, ToolType +- ConfigProfileListSidebar.tsx | Renders a sidebar component for listing, selecting, creating, and deleting configuration profiles with visual indicators for default status, scope, and includes. | exp: ConfigProfileListSidebar | dep: ../../icon, ../../../api/config-profiles, Icon, ConfigProfile +- ConfigProfilesMobileView.tsx | Renders a mobile-responsive CRUD interface for managing configuration profiles with list, detail, and edit views. | exp: ConfigProfilesMobileView | dep: ../mobile/mobile-list-view, ../mobile/mobile-detail-view, ../mobile/mobile-edit-view, ../mobile/mobile-fab, ../../icon, ../../../api/config-profiles, MobileListView, MobileDetailView, MobileEditView, MobileFAB, Icon, ConfigProfile, CreateConfigProfileRequest +## arch +Compound component pattern with panel/sidebar/mobile view variants, form-based editor with nested array/object state management, and responsive design splitting desktop (sidebar+panel) from mobile (routed views). +## tags +config, mobile, profiles, profile, view, editor, icon, list +## symbols +- ConfigProfileEditorPanel +- ConfigProfileListSidebar +- ConfigProfilesMobileView +## workflows +- change config-profiles behavior + read: ConfigProfileEditorPanel.tsx, ConfigProfileListSidebar.tsx, ConfigProfilesMobileView.tsx +## dirty +- diff --git a/apps/web/src/components/features/git/.pi-map.index.md b/apps/web/src/components/features/git/.pi-map.index.md new file mode 100644 index 0000000..88162db --- /dev/null +++ b/apps/web/src/components/features/git/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/web/src/components/features/git (index) +dir: apps/web/src/components/features/git + +## role +React components providing Git repository management UI including commit, merge, branch operations, and file editing with syntax highlighting. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- commit-dialog.tsx +- commit-panel.tsx +- file-editor.tsx +- git-mount-editor.tsx +- git-toolbar.tsx +- merge-dialog.tsx +## links +index: apps/web/src/components/features/git/.pi-map.index.md +map: apps/web/src/components/features/git/.pi-map.md +## workflows +- change git behavior + read: commit-dialog.tsx, commit-panel.tsx, file-editor.tsx +## dirty +- diff --git a/apps/web/src/components/features/git/.pi-map.md b/apps/web/src/components/features/git/.pi-map.md new file mode 100644 index 0000000..165fe9d --- /dev/null +++ b/apps/web/src/components/features/git/.pi-map.md @@ -0,0 +1,30 @@ +# apps/web/src/components/features/git +dir: apps/web/src/components/features/git + +index: apps/web/src/components/features/git/.pi-map.index.md + +## role +React components providing Git repository management UI including commit, merge, branch operations, and file editing with syntax highlighting. +## files +- commit-dialog.tsx | A React modal dialog component that displays a diff preview of file changes and allows users to enter a commit message to save those changes. | exp: CommitDialog | dep: react, ../../icon, icon +- commit-panel.tsx | React component that displays git repository changes and provides a form to commit them with a message | exp: CommitPanel | dep: react, ../../../api/git-repositories, api/git-repositories +- file-editor.tsx | A React component that displays and edits repository files with view/edit modes, syntax highlighting, and git commit functionality | exp: FileEditor | dep: react, react-router-dom, ../../../api/client, ../../../state/auth, ../../code-editor, ./commit-dialog, ../../icon, ../../syntax-highlighter, ../../../utils/language, apiClient, useAuth, CodeEditor, CommitDialog, Icon, SyntaxHighlighter, detectLanguage +- git-mount-editor.tsx | A React component for editing Git repository mount configurations with URL validation, branch selection, and path mappings. | exp: GitMountEditor | dep: react, ../../icon, ../../../api/config-profiles, icon, config-profiles +- git-toolbar.tsx | React component providing a toolbar UI for Git repository operations including branch management, fetch/pull/push, merge, and status display with polling. | exp: GitToolbar | dep: react, ../../../api/git-repositories, ../../icon, ./merge-dialog +- merge-dialog.tsx | A React modal dialog component that allows users to merge Git branches with source/target selection, optional commit message, and loading/error/success state handling. | exp: MergeDialog | dep: react, ../../../api/git-repositories, ../../icon, api/git-repositories, icon +## arch +Feature-based component architecture with modular dialog/panel pattern, form-driven state management, and optimistic UI with polling for async git operations. +## tags +git, react, commit, dialog, icon, editor, api, merge +## symbols +- CommitDialog +- CommitPanel +- FileEditor +- GitMountEditor +- GitToolbar +- MergeDialog +## workflows +- change git behavior + read: commit-dialog.tsx, commit-panel.tsx, file-editor.tsx +## dirty +- diff --git a/apps/web/src/components/features/mobile/.pi-map.index.md b/apps/web/src/components/features/mobile/.pi-map.index.md new file mode 100644 index 0000000..c97d982 --- /dev/null +++ b/apps/web/src/components/features/mobile/.pi-map.index.md @@ -0,0 +1,28 @@ +# apps/web/src/components/features/mobile (index) +dir: apps/web/src/components/features/mobile + +## role +Provides a complete set of mobile-optimized UI components for building responsive, touch-friendly interfaces across list views, detail views, forms, navigation, modals, and specialized terminal experiences. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- mobile-action-sheet.tsx +- mobile-detail-view.tsx +- mobile-edit-view.tsx +- mobile-fab.tsx +- mobile-list-view.tsx +- mobile-nav.tsx +- mobile-page-header.tsx +- mobile-terminal-header.tsx +- mobile-terminal-wrapper.tsx +## links +index: apps/web/src/components/features/mobile/.pi-map.index.md +map: apps/web/src/components/features/mobile/.pi-map.md +## workflows +- change mobile behavior + read: mobile-action-sheet.tsx, mobile-detail-view.tsx, mobile-edit-view.tsx +## dirty +- diff --git a/apps/web/src/components/features/mobile/.pi-map.md b/apps/web/src/components/features/mobile/.pi-map.md new file mode 100644 index 0000000..decd436 --- /dev/null +++ b/apps/web/src/components/features/mobile/.pi-map.md @@ -0,0 +1,35 @@ +# apps/web/src/components/features/mobile +dir: apps/web/src/components/features/mobile + +index: apps/web/src/components/features/mobile/.pi-map.index.md + +## role +Provides a complete set of mobile-optimized UI components for building responsive, touch-friendly interfaces across list views, detail views, forms, navigation, modals, and specialized terminal experiences. +## files +- mobile-action-sheet.tsx | Renders a mobile-optimized action sheet modal with title, configurable action buttons, and cancel option. | exp: MobileActionSheetItem, func:MobileActionSheet({ isOpen, onClose, title, actions, }: MobileActionSheetProps), call:useRef, call:useEffect, call:onClose, call:document.addEventListener, call:document.removeEventListener, call:e.stopPropagation, call:actions.map, call:action.onClick | dep: react, ../../icon, icon +- mobile-detail-view.tsx | A React component that renders a mobile-optimized detail view with a header (back button, title, edit/delete actions) and a field list supporting multiple value types (text, code, JSON, boolean). | exp: MobileDetailView | dep: ../../icon, react +- mobile-edit-view.tsx | A React component that renders a mobile-optimized form for editing data with configurable field types and save/cancel actions. | exp: MobileEditView | dep: react +- mobile-fab.tsx | Renders a floating action button component for mobile with an add icon and configurable click handler and label. | exp: MobileFAB | dep: ../../icon, react, icon +- mobile-list-view.tsx | Renders a searchable mobile-friendly list view with optional icons, subtitles, and click handling | exp: MobileListView | dep: ../../icon, ../../../utils/icons, react, icon, icons +- mobile-nav.tsx | Renders a mobile navigation bar with routing links, a tools group button that opens a bottom sheet, and session count badges | exp: MobileNav | dep: react, react-router-dom, ../../icon, ../tool/tools-bottom-sheet, ../../../utils/icons, icon, tools-bottom-sheet, icons utils +- mobile-page-header.tsx | Renders a mobile-only page header with optional back navigation and custom actions. | exp: func:MobilePageHeader({ title, showBack = true, actions }: MobilePageHeaderProps), call:useNavigate, call:useMobileViewport, call:navigate | dep: react-router-dom, ../../../hooks/use-mobile-viewport, ../../icon, use-mobile-viewport hook, Icon component +- mobile-terminal-header.tsx | Renders a mobile-responsive header for a terminal interface with navigation, title, connection status, font size controls, and close actions. | exp: MobileTerminalHeader | dep: react, ../../icon, icon +- mobile-terminal-wrapper.tsx | Wraps a terminal component with mobile-specific UI including auto-hiding header, virtual keyboard handling, and special keys interface. | exp: MobileTerminalWrapper | dep: react, ../terminal/terminal, ./mobile-terminal-header, ../terminal/special-keys-strip, ../terminal/special-keys-panel, ../../../hooks/use-mobile-viewport, ../../../hooks/use-virtual-keyboard, ../../../hooks/use-auto-hide, ../../../hooks/use-special-keys +## arch +Follows a feature-based component architecture with consistent mobile-first design patterns including bottom sheets, floating action buttons, auto-hiding headers, virtual keyboard handling, and contextual action menus; each component is self-contained with configurable props for titles, actions, field types, and click handlers, suggesting a reusable component library pattern rather than business-logic containers. +## tags +mobile, terminal, view, icon, header, react, sheet, action +## symbols +- MobileActionSheet +- MobilePageHeader +- MobileActionSheetItem +- call:useRef +- call:useEffect +- call:onClose +- call:document.addEventListener +- call:document.removeEventListener +## workflows +- change mobile behavior + read: mobile-action-sheet.tsx, mobile-detail-view.tsx, mobile-edit-view.tsx +## dirty +- diff --git a/apps/web/src/components/features/notification/.pi-map.index.md b/apps/web/src/components/features/notification/.pi-map.index.md new file mode 100644 index 0000000..6d149a1 --- /dev/null +++ b/apps/web/src/components/features/notification/.pi-map.index.md @@ -0,0 +1,27 @@ +# apps/web/src/components/features/notification (index) +dir: apps/web/src/components/features/notification + +## role +Provides notification UI components and event-to-toast bridging infrastructure for user-facing alerts and notifications. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- event-toast-bridge.test.tsx +- event-toast-bridge.tsx +- notification-center.test.tsx +- notification-center.tsx +- notification-item.test.tsx +- notification-item.tsx +## links +index: apps/web/src/components/features/notification/.pi-map.index.md +map: apps/web/src/components/features/notification/.pi-map.md +## workflows +- change notification behavior + read: event-toast-bridge.tsx, notification-center.tsx, notification-item.tsx +- update notification tests + read: event-toast-bridge.test.tsx, notification-center.test.tsx, notification-item.test.tsx +## dirty +- diff --git a/apps/web/src/components/features/notification/.pi-map.md b/apps/web/src/components/features/notification/.pi-map.md new file mode 100644 index 0000000..ba6d406 --- /dev/null +++ b/apps/web/src/components/features/notification/.pi-map.md @@ -0,0 +1,34 @@ +# apps/web/src/components/features/notification +dir: apps/web/src/components/features/notification + +index: apps/web/src/components/features/notification/.pi-map.index.md + +## role +Provides notification UI components and event-to-toast bridging infrastructure for user-facing alerts and notifications. +## files +- event-toast-bridge.test.tsx | Tests that EventToastBridge correctly filters instance events based on user notification preferences (toast level and muted categories) before triggering toast notifications. | dep: vitest, @testing-library/react, ./event-toast-bridge, ../../../state/events, ../../../api/settings, ../../toast-rules, ../../../types/events, event-toast-bridge, useEventContext, getUserConfig, handleEventToast, InstanceEventPayload +- event-toast-bridge.tsx | Bridges event system to toast notifications by filtering events based on user config and processing them through toast rules | exp: func:EventToastBridge() → JSX.Element | null, call:useEventContext, call:useRef, call:useState, call:useEffect, call:getUserConfig() .then((c) => { setConfig({ notification_toast_level: c.notification_toast_level ?? "all", notification_mute_categories: c.notification_mute_categories ?? [], }); }) .catch, call:setConfig, call:window.addEventListener, call:window.removeEventListener, call:processedRef.current.has, call:processedRef.current.add, call:mapEventToCategory, call:mapEventToSeverity, call:config.notification_mute_categories.includes, call:handleEventToast | dep: react, ../../../state/events, ../../toast-rules, ../../../api/settings, useEventContext, toast-rules, settings api +- notification-center.test.tsx | Tests the NotificationCenter UI component's rendering, interactions, and API integration using Vitest and React Testing Library. | dep: vitest, @testing-library/react, ./notification-center, ../../../state/notifications, ../../../api/notifications, notification-center, notification-provider, notifications-api +- notification-center.tsx | Renders a notification bell icon with a dropdown panel showing notifications, supporting mobile and desktop responsive layouts via React portal. | exp: func:NotificationCenter({ isMobileTerminal = false, }: NotificationCenterProps), call:useNotifications, call:useMobileViewport, call:useRef, call:useState, call:useCallback, call:bellRef.current.getBoundingClientRect, call:setDropdownStyle, call:useEffect, call:updatePosition, call:dropdownRef.current.contains, call:bellRef.current?.contains, call:setIsDropdownOpen, call:document.addEventListener, call:window.addEventListener, call:document.removeEventListener, call:window.removeEventListener, call:refreshList, call:String, call:createPortal, call:notifications.map, call:markAllRead, call:clearAll | dep: react, react-dom, ../../../hooks/use-notifications, ../../../hooks/use-mobile-viewport, ./notification-item, ../../icon, use-notifications, use-mobile-viewport, notification-item, icon +- notification-item.test.tsx | Tests the NotificationItem React component for rendering, styling, and user interaction behaviors. | dep: vitest, @testing-library/react, ./notification-item +- notification-item.tsx | Renders a single notification item with expandable metadata, read/dismiss actions, and severity-based icon display. | exp: NotificationItemProps, func:NotificationItem({ notification, onMarkRead, onDismiss, }: NotificationItemProps), call:useState, call:Object.keys, call:formatRelativeTime, call:Object.entries(notification.metadata).map, call:key.replace, call:formatMetadataValue, call:setExpanded, call:onMarkRead, call:onDismiss | dep: react, ../../icon, ../../../utils/time, ../../../api/notifications, ../../../utils/icons, icon, time, notifications, icons +## arch +React component-based architecture with event-driven toast bridging, responsive portal-based dropdowns, and severity-based conditional rendering with comprehensive Vitest test coverage. +## tags +event, notification, call:use, toast, notifications, listener, react, item +## symbols +- EventToastBridge +- NotificationCenter +- NotificationItem +- call:useEventContext +- call:useRef +- call:useState +- call:useEffect +- call:getUserConfig() .then((c) => { setConfig({ notification_toast_level: c.notification_toast_level ?? "all", notification_mute_categories: c.notification_mute_categories ?? [], }); }) .catch +## workflows +- change notification behavior + read: event-toast-bridge.tsx, notification-center.tsx, notification-item.tsx +- update notification tests + read: event-toast-bridge.test.tsx, notification-center.test.tsx, notification-item.test.tsx +## dirty +- diff --git a/apps/web/src/components/features/project/.pi-map.index.md b/apps/web/src/components/features/project/.pi-map.index.md new file mode 100644 index 0000000..71eaf44 --- /dev/null +++ b/apps/web/src/components/features/project/.pi-map.index.md @@ -0,0 +1,26 @@ +# apps/web/src/components/features/project (index) +dir: apps/web/src/components/features/project + +## role +Provides UI components for managing projects, including cards, dialogs, and repository settings with full CRUD operations and Git integration. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- ProjectCard.tsx +- ProjectDialog.tsx +- repositories-settings-tab.test.tsx +- repositories-settings-tab.tsx +- repository-create-dialog.tsx +## links +index: apps/web/src/components/features/project/.pi-map.index.md +map: apps/web/src/components/features/project/.pi-map.md +## workflows +- change project behavior + read: ProjectCard.tsx, ProjectDialog.tsx, repositories-settings-tab.tsx +- update project tests + read: repositories-settings-tab.test.tsx +## dirty +- diff --git a/apps/web/src/components/features/project/.pi-map.md b/apps/web/src/components/features/project/.pi-map.md new file mode 100644 index 0000000..e3c7d52 --- /dev/null +++ b/apps/web/src/components/features/project/.pi-map.md @@ -0,0 +1,29 @@ +# apps/web/src/components/features/project +dir: apps/web/src/components/features/project + +index: apps/web/src/components/features/project/.pi-map.index.md + +## role +Provides UI components for managing projects, including cards, dialogs, and repository settings with full CRUD operations and Git integration. +## files +- ProjectCard.tsx | Renders an expandable project card displaying project info, repositories, and associated workspaces with CRUD actions. | exp: ProjectCard | dep: ../../icon, ../workspace/workspace-create-form, ../../../types, Icon, WorkspaceCreateForm, ProjectWithRepos, WorkspaceSummary +- ProjectDialog.tsx | Renders a modal dialog for creating or editing a project with name/description inputs and cancel/submit actions. | exp: ProjectDialog | dep: ../../icon, React, icon +- repositories-settings-tab.test.tsx | Tests the RepositoriesSettingsTab component's repository creation flows including full URL cloning, owner/repo mode with SSH key selection, and SSH URL validation. | dep: @testing-library/react, vitest, ./repositories-settings-tab, ../../../api/git-repositories, ../../../api/ssh-keys, react-router-dom +- repositories-settings-tab.tsx | A React component that displays and manages Git repositories for a project, allowing users to list, create, and delete repositories. | exp: RepositoriesSettingsTab | dep: react, react-router-dom, ../../../api/git-repositories, ./repository-create-dialog, ../../icon +- repository-create-dialog.tsx | React dialog component for creating or cloning Git repositories with URL validation and SSH key selection. | exp: RepositoryCreateDialog | dep: react, ../../../api/git-repositories, ../../../api/ssh-keys, ../../icon +## arch +Feature-based component architecture with compound UI patterns (card/dialog/tab), form handling for CRUD, and SSH-aware Git repository management with validation testing. +## tags +repositories, project, dialog, react, create, settings, icon, repository +## symbols +- ProjectCard +- ProjectDialog +- RepositoriesSettingsTab +- RepositoryCreateDialog +## workflows +- change project behavior + read: ProjectCard.tsx, ProjectDialog.tsx, repositories-settings-tab.tsx +- update project tests + read: repositories-settings-tab.test.tsx +## dirty +- diff --git a/apps/web/src/components/features/session/.pi-map.index.md b/apps/web/src/components/features/session/.pi-map.index.md new file mode 100644 index 0000000..e88a379 --- /dev/null +++ b/apps/web/src/components/features/session/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/web/src/components/features/session (index) +dir: apps/web/src/components/features/session + +## role +Provides UI components for managing development environment sessions including creation, listing, monitoring progress, and interacting with individual sessions. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- create-session-form.tsx +- session-card.tsx +- session-list.tsx +- session-progress-panel.tsx +## links +index: apps/web/src/components/features/session/.pi-map.index.md +map: apps/web/src/components/features/session/.pi-map.md +## workflows +- change session behavior + read: create-session-form.tsx, session-card.tsx, session-list.tsx +## dirty +- diff --git a/apps/web/src/components/features/session/.pi-map.md b/apps/web/src/components/features/session/.pi-map.md new file mode 100644 index 0000000..ecd20c5 --- /dev/null +++ b/apps/web/src/components/features/session/.pi-map.md @@ -0,0 +1,30 @@ +# apps/web/src/components/features/session +dir: apps/web/src/components/features/session + +index: apps/web/src/components/features/session/.pi-map.index.md + +## role +Provides UI components for managing development environment sessions including creation, listing, monitoring progress, and interacting with individual sessions. +## files +- create-session-form.tsx | React form component for creating development sessions with configurable project, repository, tool type, branch, SSH keys, and config profile options | exp: CreateSessionForm | dep: react, ../../icon, ../../../api/sessions, ../../../types, ../../../api/git-repositories, ../../../api/tool-types, ../../../api/ssh-keys, ../../../api/config-profiles, icon component, sessions API, git-repositories API, ssh-keys API, config-profiles API, tool-types API, types +- session-card.tsx | Renders a React card component displaying session information with status badges, inline editing, action buttons, and responsive mobile/desktop layouts. | exp: SessionCardProps, func:SessionCard({ session, onOpen, onStart, onStop, onDelete, onRecreateTunnel, onRename, isBusy = false, tunnelHealth = null, }: SessionCardProps), call:useState, call:useRef, call:useMobileViewport, call:session.tool_type_interfaces?.includes, call:[ "running", "building", "starting", "probing", "pending", "unhealthy", ].includes, call:useEffect, call:optionsRef.current.contains, call:setOptionsOpen, call:document.addEventListener, call:document.removeEventListener, call:window.confirm, call:onDelete, call:setEditName, call:onRename, call:setIsEditingName, call:editName.trim, call:onOpen, call:new Date(session.created_at).toLocaleString, call:setShowActionSheet, call:onStart, call:onStop, call:onRecreateTunnel | dep: react, ../../../api/sessions, ../../icon, ../../../hooks/use-mobile-viewport, ../mobile/mobile-action-sheet, icon, use-mobile-viewport, mobile-action-sheet, sessions api types +- session-list.tsx | Renders a list of sessions grouped by active/recent status or as a flat grid, delegating to SessionCard for individual session display. | exp: SessionListProps, func:SessionList({ sessions, onOpen, onStart, onStop, onDelete, onRecreateTunnel, onRename, actionBusyId = null, tunnelHealth = {}, showGrouping = true, activeTitle = "Active Sessions", recentTitle = "Recent Sessions", maxRecent = 5, emptyMessage = "No sessions", }: SessionListProps), call:sessions.filter, call:activeStatuses.includes, call:sessions .filter((s) => recentStatuses.includes(s.status)) .slice, call:recentStatuses.includes, call:sessions.map, call:activeSessions.map, call:recentSessions.map | dep: ../../../api/sessions, ./session-card, Session, SessionCard, InstanceHealth +- session-progress-panel.tsx | Renders a panel displaying active and recently completed session operations with step-by-step progress indicators and dismissible notifications. | exp: func:SessionProgressPanel(), call:useSessionOperations, call:useEventContext, call:useEffect, call:updateOperationFromEvent, call:operations.filter, call:Date.now, call:visibleOperations.map, call:dismissOperation | dep: react, ../../../state/session-operations, ../../../state/events, ../../icon, useSessionOperations, useEventContext, Icon +## arch +Feature-based component composition with presentational components following a container/presenter pattern, using status-driven conditional rendering and responsive layout adaptations. +## tags +session, call:use, call:on, card, mobile, call:set, event, api +## symbols +- SessionCard +- SessionList +- SessionProgressPanel +- CreateSessionForm +- SessionCardProps +- call:useState +- call:useRef +- call:useMobileViewport +## workflows +- change session behavior + read: create-session-form.tsx, session-card.tsx, session-list.tsx +## dirty +- diff --git a/apps/web/src/components/features/settings/.pi-map.index.md b/apps/web/src/components/features/settings/.pi-map.index.md new file mode 100644 index 0000000..4c1b178 --- /dev/null +++ b/apps/web/src/components/features/settings/.pi-map.index.md @@ -0,0 +1,21 @@ +# apps/web/src/components/features/settings (index) +dir: apps/web/src/components/features/settings + +## role +Provides the UI components for the application's settings interface, enabling users to configure preferences across multiple categorized tabs. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- GeneralSettingsTab.tsx +- settings-tab-layout.tsx +## links +index: apps/web/src/components/features/settings/.pi-map.index.md +map: apps/web/src/components/features/settings/.pi-map.md +## workflows +- change settings behavior + read: GeneralSettingsTab.tsx, settings-tab-layout.tsx +## dirty +- diff --git a/apps/web/src/components/features/settings/.pi-map.md b/apps/web/src/components/features/settings/.pi-map.md new file mode 100644 index 0000000..fd30d95 --- /dev/null +++ b/apps/web/src/components/features/settings/.pi-map.md @@ -0,0 +1,22 @@ +# apps/web/src/components/features/settings +dir: apps/web/src/components/features/settings + +index: apps/web/src/components/features/settings/.pi-map.index.md + +## role +Provides the UI components for the application's settings interface, enabling users to configure preferences across multiple categorized tabs. +## files +- GeneralSettingsTab.tsx | Renders a general settings tab with theme, git, editor, and notification preferences using shared outlet context | exp: GeneralSettingsTab | dep: react-router-dom, ../../icon, ../../../api/settings +- settings-tab-layout.tsx | Renders a tabbed settings layout with a sidebar navigation and active tab highlighting based on current URL path. | exp: SettingsTabLayout | dep: react, react-router-dom +## arch +Tab-based layout using React Router outlet context for state sharing, with URL-driven navigation and sidebar-based tab switching pattern. +## tags +settings, tab, general, layout, react, renders, router, dom +## symbols +- GeneralSettingsTab +- SettingsTabLayout +## workflows +- change settings behavior + read: GeneralSettingsTab.tsx, settings-tab-layout.tsx +## dirty +- diff --git a/apps/web/src/components/features/ssh-keys/.pi-map.index.md b/apps/web/src/components/features/ssh-keys/.pi-map.index.md new file mode 100644 index 0000000..b4cefb0 --- /dev/null +++ b/apps/web/src/components/features/ssh-keys/.pi-map.index.md @@ -0,0 +1,21 @@ +# apps/web/src/components/features/ssh-keys (index) +dir: apps/web/src/components/features/ssh-keys + +## role +Provides UI components for SSH key lifecycle management including creation and list operations with cryptographic signing/verification features. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- SSHKeyCreateForm.tsx +- SSHKeyList.tsx +## links +index: apps/web/src/components/features/ssh-keys/.pi-map.index.md +map: apps/web/src/components/features/ssh-keys/.pi-map.md +## workflows +- change ssh-keys behavior + read: SSHKeyCreateForm.tsx, SSHKeyList.tsx +## dirty +- diff --git a/apps/web/src/components/features/ssh-keys/.pi-map.md b/apps/web/src/components/features/ssh-keys/.pi-map.md new file mode 100644 index 0000000..0f7bcd9 --- /dev/null +++ b/apps/web/src/components/features/ssh-keys/.pi-map.md @@ -0,0 +1,22 @@ +# apps/web/src/components/features/ssh-keys +dir: apps/web/src/components/features/ssh-keys + +index: apps/web/src/components/features/ssh-keys/.pi-map.index.md + +## role +Provides UI components for SSH key lifecycle management including creation and list operations with cryptographic signing/verification features. +## files +- SSHKeyCreateForm.tsx | Renders a form for creating/generating a new SSH key with name input and submit button. | exp: SSHKeyCreateForm | dep: ../../icon, React, Icon component +- SSHKeyList.tsx | Renders a list of SSH keys with signing and verification capabilities | exp: SSHKeyList | dep: ../../icon, ../../data-states, ../../../api/ssh-keys, Icon, EmptyState, ErrorState, SSHKey type +## arch +Feature-based component composition with form/list separation pattern, likely using React functional components with hooks for state management and API integration. +## tags +sshkey, form, list, create, ssh, icon, renders, keys +## symbols +- SSHKeyCreateForm +- SSHKeyList +## workflows +- change ssh-keys behavior + read: SSHKeyCreateForm.tsx, SSHKeyList.tsx +## dirty +- diff --git a/apps/web/src/components/features/terminal/.pi-map.index.md b/apps/web/src/components/features/terminal/.pi-map.index.md new file mode 100644 index 0000000..18d09f7 --- /dev/null +++ b/apps/web/src/components/features/terminal/.pi-map.index.md @@ -0,0 +1,28 @@ +# apps/web/src/components/features/terminal (index) +dir: apps/web/src/components/features/terminal + +## role +Provides cross-platform terminal UI components with session management, special key input, and WebSocket-backed xterm.js integration for web-based terminal emulation. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- DesktopTerminalView.tsx +- MobileTerminalView.tsx +- special-keys-panel.tsx +- special-keys-strip.tsx +- terminal-session-tabs.test.tsx +- terminal-session-tabs.tsx +- terminal.tsx +## links +index: apps/web/src/components/features/terminal/.pi-map.index.md +map: apps/web/src/components/features/terminal/.pi-map.md +## workflows +- change terminal behavior + read: DesktopTerminalView.tsx, MobileTerminalView.tsx, special-keys-panel.tsx +- update terminal tests + read: terminal-session-tabs.test.tsx +## dirty +- diff --git a/apps/web/src/components/features/terminal/.pi-map.md b/apps/web/src/components/features/terminal/.pi-map.md new file mode 100644 index 0000000..314de6e --- /dev/null +++ b/apps/web/src/components/features/terminal/.pi-map.md @@ -0,0 +1,35 @@ +# apps/web/src/components/features/terminal +dir: apps/web/src/components/features/terminal + +index: apps/web/src/components/features/terminal/.pi-map.index.md + +## role +Provides cross-platform terminal UI components with session management, special key input, and WebSocket-backed xterm.js integration for web-based terminal emulation. +## files +- DesktopTerminalView.tsx | Renders a desktop-optimized terminal view with session tabs, fullscreen mode, font controls, and reset confirmation dialog | exp: DesktopTerminalView | dep: react, ./terminal, ./terminal-session-tabs, ../../../api/terminal, React, TerminalComponent, TerminalSessionTabs, TerminalSession type +- MobileTerminalView.tsx | Renders a mobile-optimized terminal interface with toolbar, session tabs, terminal output, and special keys input controls. | exp: MobileTerminalView | dep: react, ./terminal, ./terminal-session-tabs, ../../icon, ./special-keys-strip, ./special-keys-panel, ../../../hooks/use-special-keys, ../../../api/terminal +- special-keys-panel.tsx | Renders an overlay panel of special keyboard keys (Home, End, F1-F12, etc.) that sends terminal escape sequences when clicked, with optional modifier key support. | exp: SpecialKeysPanel | dep: react, ../../../hooks/use-special-keys, React, use-special-keys hook +- special-keys-strip.tsx | Renders a strip of buttons for sending special keyboard keys (Esc, Tab, arrows, etc.) with optional modifier support for a terminal interface. | exp: SpecialKeysStrip | dep: react, ../../../hooks/use-special-keys, React, use-special-keys hook +- terminal-session-tabs.test.tsx | Tests a React component that renders interactive terminal session tabs with selection, close confirmation, renaming, creation limits, and status indicators. | dep: @testing-library/react, vitest, ./terminal-session-tabs +- terminal-session-tabs.tsx | Renders a tabbed interface for managing multiple terminal sessions with selection, creation, renaming, and close confirmation features. | exp: TerminalSessionInfo, TerminalSessionTabsProps, TerminalSessionTabs | dep: react, React +- terminal.tsx | React component that renders an interactive xterm.js terminal with WebSocket connectivity, mobile touch support, flow control, heartbeat monitoring, and reconnection logic. | exp: TerminalProps, TerminalRef, TerminalComponent | dep: react, xterm, xterm-addon-fit, xterm-addon-web-links, xterm/css/xterm.css, ../../../hooks/use-special-keys, React, use-special-keys hook +## arch +Feature-based component architecture with platform-specific view splitting (desktop/mobile), compound component pattern for terminal controls, custom hook-driven WebSocket/xterm.js integration with heartbeat/reconnection logic, and Jest-tested tabbed session management. +## tags +terminal, special, keys, session, react, tabs, view, renders +## symbols +- DesktopTerminalView +- MobileTerminalView +- SpecialKeysPanel +- SpecialKeysStrip +- TerminalSessionInfo +- TerminalSessionTabsProps +- TerminalSessionTabs +- TerminalProps +## workflows +- change terminal behavior + read: DesktopTerminalView.tsx, MobileTerminalView.tsx, special-keys-panel.tsx +- update terminal tests + read: terminal-session-tabs.test.tsx +## dirty +- diff --git a/apps/web/src/components/features/tool-workshop/.pi-map.index.md b/apps/web/src/components/features/tool-workshop/.pi-map.index.md new file mode 100644 index 0000000..1064fb6 --- /dev/null +++ b/apps/web/src/components/features/tool-workshop/.pi-map.index.md @@ -0,0 +1,22 @@ +# apps/web/src/components/features/tool-workshop (index) +dir: apps/web/src/components/features/tool-workshop + +## role +Provides a complete CRUD interface for managing tool types in a "Tool Workshop" feature with desktop and mobile views +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- ToolTypeEditorPanel.tsx +- ToolTypeListSidebar.tsx +- ToolWorkshopMobileView.tsx +## links +index: apps/web/src/components/features/tool-workshop/.pi-map.index.md +map: apps/web/src/components/features/tool-workshop/.pi-map.md +## workflows +- change tool-workshop behavior + read: ToolTypeEditorPanel.tsx, ToolTypeListSidebar.tsx, ToolWorkshopMobileView.tsx +## dirty +- diff --git a/apps/web/src/components/features/tool-workshop/.pi-map.md b/apps/web/src/components/features/tool-workshop/.pi-map.md new file mode 100644 index 0000000..f978cc8 --- /dev/null +++ b/apps/web/src/components/features/tool-workshop/.pi-map.md @@ -0,0 +1,26 @@ +# apps/web/src/components/features/tool-workshop +dir: apps/web/src/components/features/tool-workshop + +index: apps/web/src/components/features/tool-workshop/.pi-map.index.md + +## role +Provides a complete CRUD interface for managing tool types in a "Tool Workshop" feature with desktop and mobile views +## files +- ToolTypeEditorPanel.tsx | Renders a form panel for creating or editing tool types with support for compose, dockerfile, and manifest definition types | exp: ToolTypeFormState, ToolTypeEditorPanel | dep: ../../icon, ../tool/manifest-editor, ../../../api/tool-types, ../../../api/tool-definitions, React, Icon, ManifestEditor +- ToolTypeListSidebar.tsx | Renders a sidebar component for listing, selecting, creating, and deleting tool types in a "Tool Workshop" interface. | exp: ToolTypeListSidebar | dep: ../../icon, ../../../api/tool-types, React, Icon component, ToolType type +- ToolWorkshopMobileView.tsx | Renders a mobile-responsive view for managing tool types with list, detail, and edit modes | exp: MobileView, ToolWorkshopMobileView | dep: ../mobile/mobile-list-view, ../mobile/mobile-detail-view, ../mobile/mobile-edit-view, ../mobile/mobile-fab, ../../../api/tool-types, ./ToolTypeEditorPanel, MobileListView, MobileDetailView, MobileEditView, MobileFAB, ToolType, ToolTypeFormState +## arch +Split-pane layout with sidebar list navigation, detail/edit panel, and mobile-responsive view switching using conditional rendering patterns +## tags +tool, mobile, type, view, types, list, panel, editor +## symbols +- ToolTypeFormState +- ToolTypeEditorPanel +- ToolTypeListSidebar +- MobileView +- ToolWorkshopMobileView +## workflows +- change tool-workshop behavior + read: ToolTypeEditorPanel.tsx, ToolTypeListSidebar.tsx, ToolWorkshopMobileView.tsx +## dirty +- diff --git a/apps/web/src/components/features/tool/.pi-map.index.md b/apps/web/src/components/features/tool/.pi-map.index.md new file mode 100644 index 0000000..4aa167d --- /dev/null +++ b/apps/web/src/components/features/tool/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/web/src/components/features/tool (index) +dir: apps/web/src/components/features/tool + +## role +Provides UI components for managing container-based development tools, including instance lifecycle operations, manifest editing, and workspace-integrated tool launching. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- instance-list.tsx +- manifest-editor.tsx +- start-tool-fab.tsx +- start-tool-modal.tsx +- tool-starter.tsx +- tools-bottom-sheet.tsx +## links +index: apps/web/src/components/features/tool/.pi-map.index.md +map: apps/web/src/components/features/tool/.pi-map.md +## workflows +- change tool behavior + read: instance-list.tsx, manifest-editor.tsx, start-tool-fab.tsx +## dirty +- diff --git a/apps/web/src/components/features/tool/.pi-map.md b/apps/web/src/components/features/tool/.pi-map.md new file mode 100644 index 0000000..c65090f --- /dev/null +++ b/apps/web/src/components/features/tool/.pi-map.md @@ -0,0 +1,32 @@ +# apps/web/src/components/features/tool +dir: apps/web/src/components/features/tool + +index: apps/web/src/components/features/tool/.pi-map.index.md + +## role +Provides UI components for managing container-based development tools, including instance lifecycle operations, manifest editing, and workspace-integrated tool launching. +## files +- instance-list.tsx | Displays and manages a list of tool instances with CRUD operations, real-time status updates, and configuration profile selection. | exp: InstanceList | dep: react, react-router-dom, ../../icon, ../../../api/sessions, ../../../api/tool-types, ../session/create-session-form, ../../../api/config-profiles, ../../../api/ssh-keys, ../../../state/events, ../../../state/sessions, icon, api/sessions, api/tool-types, api/config-profiles, api/ssh-keys, state/events, state/sessions +- manifest-editor.tsx | A React component that provides a form-based UI for editing container tool definition manifests with fields for base images, packages, user config, environment variables, scripts, mounts, and runtime settings, including compilation preview functionality. | exp: ManifestEditor | dep: react, ../../icon, ../../../utils/errors, ../../../api/tool-definitions, icon, errors, tool-definitions +- start-tool-fab.tsx | A floating action button component that opens a modal to select a workspace and start a tool. | exp: func:StartToolFAB(), call:useState, call:setOpen, call:setWorkspacesLoading, call:listAllWorkspaces, call:setWorkspaces, call:setSelectedWorkspace, call:e.stopPropagation, call:workspaces.find, call:workspaces.map | dep: react, ../../icon, ./tool-starter, ../../../types/workspace, ../../../api/workspaces, icon, tool-starter, workspaces api, workspace types +- start-tool-modal.tsx | Renders a modal dialog for selecting a tool type and optional config profile to start on a workspace. | exp: StartToolModalProps, func:StartToolModal({ workspace, onClose, onStart, }: StartToolModalProps), call:useState, call:useAsyncData, call:e.preventDefault, call:setError, call:setSubmitting, call:onStart, call:onClose, call:e.stopPropagation, call:setToolTypeId, call:toolTypes?.map, call:setConfigProfileId | dep: react, ../../icon, ../../../api/tool-types, ../../../hooks/use-async-data, ../../../types/workspace, icon, tool-types, use-async-data, workspace +- tool-starter.tsx | React component that provides a workspace-first form for starting a new tool instance, fetching tool types, config profiles, and SSH keys dynamically. | exp: ToolStarterProps, func:ToolStarter({ workspace, onStarted, onCancel, }: ToolStarterProps), call:useSessions, call:useSessionOperations, call:useState, call:useEffect, call:listToolTypes, call:setToolTypes, call:setToolTypesError, call:setToolTypesLoading, call:load, call:setProfiles, call:setSelectedProfileId, call:setProfilesLoading, call:listConfigProfiles, call:data.find, call:listSSHKeys, call:setSshKeys, call:setSelectedSshKeyIds, call:console.error, call:setSshKeysLoading, call:sshKeys.find, call:useCallback, call:setError, call:setStarting, call:createInstance, call:displayName.trim, call:startInstance, call:addOrUpdateSession, call:startOperation, call:onStarted, call:setSelectedToolTypeId, call:toolTypes.find, call:setDisplayName, call:toolTypes.map, call:setNameEdited, call:profiles.map, call:sshKeys.map, call:selectedSshKeyIds.includes, call:prev.filter | dep: react, ../../icon, ../../../api/tool-types, ../../../api/config-profiles, ../../../api/ssh-keys, ../../../state/sessions, ../../../state/session-operations, ../../../types/workspace, ../../../api/sessions, icon, tool-types, config-profiles, ssh-keys, sessions, session-operations, workspace +- tools-bottom-sheet.tsx | Renders a mobile bottom sheet navigation menu for tools with active route highlighting | exp: ToolsBottomSheet | dep: react-router-dom, ../../icon, icon +## arch +Feature-based component architecture with form-driven modals, real-time status integration, and responsive mobile/desktop patterns (bottom sheets vs modals) +## tags +tool, call:set, types, call:use, api, start, ssh, icon +## symbols +- StartToolFAB +- StartToolModal +- ToolStarter +- InstanceList +- ManifestEditor +- call:useState +- call:setOpen +- call:setWorkspacesLoading +## workflows +- change tool behavior + read: instance-list.tsx, manifest-editor.tsx, start-tool-fab.tsx +## dirty +- diff --git a/apps/web/src/components/features/workspace/.pi-map.index.md b/apps/web/src/components/features/workspace/.pi-map.index.md new file mode 100644 index 0000000..ba52a36 --- /dev/null +++ b/apps/web/src/components/features/workspace/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/web/src/components/features/workspace (index) +dir: apps/web/src/components/features/workspace + +## role +Provides the workspace UI shell and container components that orchestrate the repository browsing, editing, and tool execution environment for the web application. +## parent +index: apps/web/src/components/features/.pi-map.index.md +map: apps/web/src/components/features/.pi-map.md +## children +- +## files +- FileBrowser.tsx +- WorkspaceLayout.tsx +- workspace-card.tsx +- workspace-create-form.tsx +- workspace-header.tsx +- workspace-instance-chips.tsx +## links +index: apps/web/src/components/features/workspace/.pi-map.index.md +map: apps/web/src/components/features/workspace/.pi-map.md +## workflows +- change workspace behavior + read: FileBrowser.tsx, WorkspaceLayout.tsx, workspace-card.tsx +## dirty +- diff --git a/apps/web/src/components/features/workspace/.pi-map.md b/apps/web/src/components/features/workspace/.pi-map.md new file mode 100644 index 0000000..77e6518 --- /dev/null +++ b/apps/web/src/components/features/workspace/.pi-map.md @@ -0,0 +1,32 @@ +# apps/web/src/components/features/workspace +dir: apps/web/src/components/features/workspace + +index: apps/web/src/components/features/workspace/.pi-map.index.md + +## role +Provides the workspace UI shell and container components that orchestrate the repository browsing, editing, and tool execution environment for the web application. +## files +- FileBrowser.tsx | A React component that displays a browsable file tree for a git repository with directory navigation, file status indicators, and URL-based state management. | exp: FileBrowser | dep: react, react-router-dom, ../../../api/client, ../../data-states, ../../icon, ../../../api/git-repositories, apiClient, EmptyState, Icon +- WorkspaceLayout.tsx | Renders a responsive workspace layout that switches between mobile tab-based navigation and desktop sidebar/main panel layout for repository file browsing, editing, git operations, and terminal tools. | exp: WorkspaceLayout | dep: ../../icon, ./FileBrowser, ../git/file-editor, ../git/commit-panel, ../git/git-toolbar, ../tool/instance-list, ../../../api/git-repositories, ../../../api/tool-types, ../../../hooks/use-repo-workspace, Icon, FileBrowser, FileEditor, CommitPanel, GitToolbar, InstanceList, GitRepository, GitStatus, ToolType, Project +- workspace-card.tsx | React card component that displays workspace information with status, metadata, and action buttons | exp: WorkspaceCardProps, func:WorkspaceCard({ workspace, loading = false, onStartTool, onSync, onDelete, }: WorkspaceCardProps), call:onStartTool, call:onSync, call:onDelete | dep: react-router-dom, ../../icon, ./workspace-instance-chips, ../../../types/workspace +- workspace-create-form.tsx | React form component for creating workspaces with cascading project/repository/branch selectors and support for both contextual and standalone modes | exp: WorkspaceCreateFormProps, func:WorkspaceCreateForm({ onSubmit, onCancel, defaultProjectId, defaultRepoId, }: WorkspaceCreateFormProps), call:Boolean, call:useState, call:useGitRepo, call:useEffect, call:git.branches.includes, call:setSelectedBranch, call:setIsNewBranch, call:useCallback, call:listProjects, call:setProjects, call:setSelectedProject, call:setError, call:setFetchingProjects, call:loadProjects, call:setRepos, call:setSelectedRepo, call:listRepositories, call:loadRepos, call:setNewBranchName, call:e.preventDefault, call:name.trim, call:newBranchName.trim, call:setSubmitting, call:createWorkspaceTopLevel, call:onSubmit, call:projects.map, call:repos.map, call:setName, call:handleBranchChange, call:git.branches.map | dep: react, ../../icon, ../../../api/projects, ../../../api/git-repositories, ../../../api/workspaces, ../../../hooks/use-git-repo, ../../../types, icon, api/projects, api/git-repositories, api/workspaces, hooks/use-git-repo, types +- workspace-header.tsx | Renders a workspace header component displaying project info with navigation links to history and settings pages. | exp: WorkspaceHeader | dep: react-router-dom, ../../icon, icon +- workspace-instance-chips.tsx | Displays running tool instances for a workspace as clickable status chips with external links. | exp: func:WorkspaceInstanceChips({ workspaceId, }: WorkspaceInstanceChipsProps), call:useState, call:useEffect, call:listWorkspaceInstances, call:setInstances, call:setLoading, call:load, call:instances.map, call:e.stopPropagation | dep: react, ../../../api/workspace-instances, ../../../api/sessions +## arch +Compound component architecture with responsive layout switching (mobile/desktop), URL-driven state management for file navigation, and feature-based composition combining card/list views, forms, headers, and dynamic tool instance indicators. +## tags +workspace, call:set, git, api, call:use, branch, projects, react +## symbols +- WorkspaceCard +- WorkspaceCreateForm +- WorkspaceInstanceChips +- FileBrowser +- WorkspaceLayout +- WorkspaceCardProps +- call:onStartTool +- call:onSync +## workflows +- change workspace behavior + read: FileBrowser.tsx, WorkspaceLayout.tsx, workspace-card.tsx +## dirty +- diff --git a/apps/web/src/hooks/.pi-map.index.md b/apps/web/src/hooks/.pi-map.index.md new file mode 100644 index 0000000..1fcee02 --- /dev/null +++ b/apps/web/src/hooks/.pi-map.index.md @@ -0,0 +1,48 @@ +# apps/web/src/hooks (index) +dir: apps/web/src/hooks + +## role +Provides a comprehensive collection of custom React hooks that encapsulate reusable stateful logic, side effects, and API interactions for the web application's UI, data management, and domain-specific operations. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- use-async-data.ts +- use-auto-hide.ts +- use-config-profiles.ts +- use-events.test.ts +- use-events.ts +- use-git-repo.ts +- use-instance-actions.ts +- use-mobile-viewport.ts +- use-notifications.test.tsx +- use-notifications.ts +- use-projects.ts +- use-repo-workspace.ts +- use-special-keys.ts +- use-ssh-keys.ts +- use-start-tool.ts +- use-terminal-page.ts +- use-terminal-sessions.ts +- use-theme.ts +- use-tool-workshop.ts +- use-virtual-keyboard.ts +- use-workspace-actions.ts +- use-workspace-files.ts +- use-workspace-git.ts +- use-workspace-instances.ts +- use-workspaces.ts +## links +index: apps/web/src/hooks/.pi-map.index.md +map: apps/web/src/hooks/.pi-map.md +## workflows +- change hooks behavior + read: use-async-data.ts, use-auto-hide.ts, use-config-profiles.ts +- update hooks tests + read: use-events.test.ts, use-notifications.test.tsx +- change hooks config + read: use-config-profiles.ts +## dirty +- diff --git a/apps/web/src/hooks/.pi-map.md b/apps/web/src/hooks/.pi-map.md new file mode 100644 index 0000000..9d4c941 --- /dev/null +++ b/apps/web/src/hooks/.pi-map.md @@ -0,0 +1,55 @@ +# apps/web/src/hooks +dir: apps/web/src/hooks + +index: apps/web/src/hooks/.pi-map.index.md + +## role +Provides a comprehensive collection of custom React hooks that encapsulate reusable stateful logic, side effects, and API interactions for the web application's UI, data management, and domain-specific operations. +## files +- use-async-data.ts | A custom React hook that manages asynchronous data fetching with loading, error, and ready states, plus a manual reload capability. | exp: func:useAsyncData(fetcher: () => Promise, deps: React.DependencyList) → UseAsyncDataResult, call:useState, call:useCallback, call:setStatus, call:setError, call:fetcher, call:setData, call:load, call:useEffect | dep: react +- use-auto-hide.ts | A React custom hook that automatically hides an element after a specified timeout and provides manual controls for showing, hiding, and toggling visibility. | exp: func:useAutoHide(options: AutoHideOptions), call:useState, call:useRef, call:Date.now, call:useCallback, call:setIsVisible, call:clearTimeout, call:setTimeout, call:hide, call:show, call:useEffect | dep: react +- use-config-profiles.ts | A React custom hook that manages config profile CRUD operations, form state, profile inclusion with cycle detection, and drag-and-drop reordering. | exp: useConfigProfiles | dep: react, ../utils/errors, ../api/config-profiles, ../api/projects, ../api/tool-types, ../types +- use-events.test.ts | Tests a React custom hook that manages Server-Sent Events connections with automatic reconnection, backoff strategies, and error handling. | dep: vitest, @testing-library/react, ./use-events, ../api/events, use-events hook, ../api/events module +- use-events.ts | React hook that manages a Server-Sent Events connection with exponential backoff reconnection, event buffering, and auth/rate-limit handling. | exp: UseEventsReturn, func:useEvents() → UseEventsReturn, call:useState, call:useRef, call:useCallback, call:clearTimeout, call:createEventSource, call:setConnected, call:setError, call:setReconnectCount, call:JSON.parse, call:setEvents, call:es.close, call:Math.min, call:Math.pow, call:Math.random, call:setTimeout, call:probeEventStreamStatus, call:window.location.assign, call:connect, call:useEffect, call:esRef.current.close | dep: react, ../api/events, ../types/events +- use-git-repo.ts | A custom React hook that centralizes all git repository operations (branch management, status tracking, commit history, and git actions) into a reusable interface for components. | exp: GitStatus, UseGitRepoResult, func:useGitRepo(projectId: string | undefined, repoId: string | undefined) → UseGitRepoResult, call:useState, call:useCallback, call:setLoading, call:setError, call:fn, call:extractError, call:withLoading, call:listRepositoryBranches, call:setBranches, call:data.branches.map, call:setDefaultBranch, call:getRepositoryStatus, call:setStatus, call:getRepositoryHistory, call:setHistory, call:getCommitDetail, call:setCommitDetail, call:commitChanges, call:refreshStatus, call:pushRepository, call:pullRepository, call:fetchRepository, call:checkoutBranch, call:refreshBranches, call:createBranch, call:deleteBranch, call:mergeBranches, call:refreshHistory, call:useEffect, raise:err | dep: react, ../api/git-repositories +- use-instance-actions.ts | A custom React hook that provides a centralized interface for managing instance/session actions including opening, starting, stopping, deleting, force-deleting, recreating tunnels, and renaming, with loading states and dirty delete handling for conflict resolution. | exp: func:useInstanceActions(options: UseInstanceActionsOptions) → UseInstanceActionsReturn, call:useSessions, call:useSessionOperations, call:useState, call:useRef, call:useCallback, call:tabRefs.current.get, call:existing.focus, call:session.tool_type_interfaces?.includes, call:window.open, call:tabRefs.current.set, call:setLoadingSessionId, call:startOperation, call:startInstance, call:onRefresh, call:completeOperation, call:stopInstance, call:deleteInstance, call:setDirtyDeleteSession, call:setDirtyDeleteFiles, call:removeSession, call:recreateInstanceTunnel, call:alert, call:newName.trim, call:renameInstance | dep: react, ../api/sessions, ../state/sessions, ../state/session-operations +- use-mobile-viewport.ts | A React hook that tracks whether the viewport width is below a mobile breakpoint (768px) | exp: func:useMobileViewport(), call:useState, call:useEffect, call:setIsMobile, call:window.addEventListener, call:window.removeEventListener | dep: react +- use-notifications.test.tsx | Tests the useNotifications custom React hook with mocked API calls, covering optimistic updates, polling behavior, and error handling. | dep: vitest, @testing-library/react, ./use-notifications, ../state/notifications, ../api/notifications, use-notifications +- use-notifications.ts | Custom React hook that provides access to notification state and ensures it's used within a NotificationProvider | exp: func:useNotifications(), call:useContext, raise:Error | dep: react, ../state/notifications +- use-projects.ts | Custom React hook for managing project CRUD operations, workspace management, and dialog state for a project management UI | exp: useProjects | dep: react, ../api/projects, ../api/workspaces, ./use-async-data, ../types +- use-repo-workspace.ts | A React custom hook that manages workspace state for a repository-based project, including loading project data, repositories, branches, git status, and tool types while synchronizing selection state with URL search parameters. | exp: Project, useRepoWorkspace | dep: react, react-router-dom, ../api/client, ../api/git-repositories, ../api/tool-types +- use-special-keys.ts | Maps special keys and modifier+character combinations to ANSI escape sequences for terminal input simulation. | exp: SpecialKey, ModifierKey, func:getSequenceWithModifier(key: SpecialKey, activeModifier: ModifierKey | null) → { sequence: string; clearModifier: boolean } | null, call:char.toLowerCase, func:applyModifierToChar(char: string, modifier: ModifierKey) → string | null, call:char.toLowerCase +- use-ssh-keys.ts | A React custom hook that manages SSH key operations including listing, generating, deleting, signing payloads, and verifying signatures. | exp: useSSHKeys | dep: react, ../api/ssh-keys, ./use-async-data +- use-start-tool.ts | React hook that manages the state and API calls for creating and starting a tool instance on a workspace | exp: UseStartToolResult, func:useStartTool() → UseStartToolResult, call:useState, call:useCallback, call:setStarting, call:setError, call:createInstance, call:startInstance | dep: react, ../api/sessions, ../types/workspace +- use-terminal-page.ts | Manages terminal page state including sessions, keyboard shortcuts, fullscreen mode, mobile viewport handling, and terminal lifecycle operations. | exp: useTerminalPage | dep: react, react-router-dom, ../components/features/terminal/terminal, ../components/features/terminal/terminal-session-tabs, ./use-mobile-viewport, ./use-auto-hide, ./use-virtual-keyboard, ./use-terminal-sessions, ../api/terminal, ./use-special-keys, use-mobile-viewport, use-auto-hide, use-virtual-keyboard, use-terminal-sessions, terminal, terminal-session-tabs, api/terminal, api/sessions, use-special-keys +- use-terminal-sessions.ts | React custom hook that manages terminal session state (CRUD operations, active session tracking) for a given instance | exp: UseTerminalSessionsResult, func:useTerminalSessions(instanceId: string) → UseTerminalSessionsResult, call:useState, call:useCallback, call:setLoading, call:setError, call:listTerminalSessions, call:setSessions, call:setActiveSessionId, call:createTerminalSession, call:closeTerminalSession, call:prev.filter, call:renameTerminalSession, call:prev.map, call:resetTerminalSession, call:loadSessions, call:useEffect | dep: react, ../api/terminal +- use-theme.ts | React hook that fetches user theme preference on mount and applies it to the document root element via data-theme attribute | exp: func:useTheme(), call:useEffect, call:getUserConfig, call:document.documentElement.removeAttribute, call:document.documentElement.setAttribute | dep: react, ../api/settings +- use-tool-workshop.ts | React custom hook that manages state and operations for a tool workshop UI, including CRUD operations for tool types and tool definitions with form handling and validation. | exp: useToolWorkshop | dep: react, ../utils/errors, ../api/tool-types, ../api/tool-definitions, ../components/features/tool-workshop/ToolTypeEditorPanel +- use-virtual-keyboard.ts | React hook that detects virtual keyboard open/close state and measures its height on mobile devices | exp: func:useVirtualKeyboard(), call:useState, call:useCallback, call:setState, call:useEffect, call:visualViewport.addEventListener, call:window.addEventListener, call:updateKeyboardState, call:visualViewport.removeEventListener, call:window.removeEventListener | dep: react +- use-workspace-actions.ts | Provides a React hook that encapsulates workspace CRUD operations with loading state management and user confirmation dialogs for destructive actions. | exp: UseWorkspaceActionsResult, func:useWorkspaceActions() → UseWorkspaceActionsResult, call:useState, call:useCallback, call:createWorkspace, call:setLoadingId, call:deleteWorkspace, call:onRefresh, call:window.confirm, call:instances.map((i) => `- ${i.name}`).join, call:syncWorkspace, call:updateWorkspace, raise:err | dep: react, ../api/workspaces, ../types/workspace +- use-workspace-files.ts | Custom React hook for managing workspace file operations including listing, loading, saving, and navigating files. | exp: UseWorkspaceFilesResult, func:useWorkspaceFiles(workspaceId: string) → UseWorkspaceFilesResult, call:useState, call:useCallback, call:setLoading, call:setError, call:listWorkspaceFiles, call:setEntries, call:setCurrentPath, call:setContent, call:getWorkspaceFileContent, call:saveWorkspaceFile, call:refresh, call:useEffect | dep: react, ../api/workspace-files +- use-workspace-git.ts | Custom React hook that provides git operations and state management for a workspace | exp: UseWorkspaceGitResult, func:useWorkspaceGit(workspaceId: string) → UseWorkspaceGitResult, call:useState, call:useCallback, call:setLoading, call:setError, call:Promise.all, call:getGitStatus, call:getGitBranches, call:getGitHistory, call:setStatus, call:setBranches, call:setCurrentBranch, call:setHistory, call:gitCommit, call:refresh, call:gitPush, call:gitPull, call:gitFetch, call:gitCheckout, call:useEffect | dep: react, ../api/workspace-git +- use-workspace-instances.ts | Custom React hook for managing workspace instances with CRUD operations, loading states, and error handling. | exp: UseWorkspaceInstancesResult, func:useWorkspaceInstances(workspaceId: string) → UseWorkspaceInstancesResult, call:useState, call:useCallback, call:setLoading, call:setError, call:listWorkspaceInstances, call:setInstances, call:createWorkspaceInstance, call:refresh, call:useEffect | dep: react, ../api/workspace-instances, ../api/sessions +- use-workspaces.ts | Custom React hook that fetches and manages workspace data with loading and error states. | exp: UseWorkspacesResult, func:useWorkspaces(projectId: string, repoId: string) → UseWorkspacesResult, call:useState, call:useCallback, call:setLoading, call:setError, call:listWorkspaces, call:listAllWorkspaces, call:setWorkspaces, call:useEffect, call:refresh | dep: react, ../api/workspaces, ../types/workspace +## arch +Follows the React Hooks pattern with custom hooks as the primary abstraction—each hook typically combines useState/useEffect/useCallback to manage local state, API calls, and side effects; many hooks integrate with TanStack Query/SWR-like patterns for server state (loading/error/reload), use context providers (e.g., NotificationProvider), and synchronize with URL search params; complex hooks compose simpler ones (e.g., use-terminal-page composes use-mobile-viewport, use-auto-hide) and use reducer-like state management for multi-faceted domain operations (CRUD, drag-and-drop, form handling). +## tags +call:set, call:use, workspace, react, state, terminal, api, git +## symbols +- useAsyncData +- useAutoHide +- useEvents +- useGitRepo +- useInstanceActions +- useMobileViewport +- useNotifications +- getSequenceWithModifier +## workflows +- change hooks behavior + read: use-async-data.ts, use-auto-hide.ts, use-config-profiles.ts +- update hooks tests + read: use-events.test.ts, use-notifications.test.tsx +- change hooks config + read: use-config-profiles.ts +## dirty +- diff --git a/apps/web/src/pages/.pi-map.index.md b/apps/web/src/pages/.pi-map.index.md new file mode 100644 index 0000000..38f8d8b --- /dev/null +++ b/apps/web/src/pages/.pi-map.index.md @@ -0,0 +1,39 @@ +# apps/web/src/pages (index) +dir: apps/web/src/pages + +## role +Implements the complete set of top-level routed page components for the web application, covering all major user-facing features including project management, git operations, workspace management, terminal access, user settings, and system administration. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- ConfigProfilesPage.tsx +- DashboardPage.test.tsx +- DashboardPage.tsx +- GitHistoryPage.tsx +- GitRepositoriesPage.tsx +- PlaceholderPage.tsx +- ProfilePage.tsx +- ProjectSettingsPage.tsx +- ProjectsPage.test.tsx +- ProjectsPage.tsx +- RepoWorkspacePage.tsx +- SessionsPage.tsx +- SettingsPage.tsx +- SshKeysPage.tsx +- TerminalPage.tsx +- ToolWorkshopPage.tsx +- WorkspaceDetailPage.tsx +- WorkspacesPage.tsx +## links +index: apps/web/src/pages/.pi-map.index.md +map: apps/web/src/pages/.pi-map.md +## workflows +- change pages behavior + read: ConfigProfilesPage.tsx, DashboardPage.tsx, GitHistoryPage.tsx +- update pages tests + read: DashboardPage.test.tsx, ProjectsPage.test.tsx +## dirty +- diff --git a/apps/web/src/pages/.pi-map.md b/apps/web/src/pages/.pi-map.md new file mode 100644 index 0000000..9240347 --- /dev/null +++ b/apps/web/src/pages/.pi-map.md @@ -0,0 +1,46 @@ +# apps/web/src/pages +dir: apps/web/src/pages + +index: apps/web/src/pages/.pi-map.index.md + +## role +Implements the complete set of top-level routed page components for the web application, covering all major user-facing features including project management, git operations, workspace management, terminal access, user settings, and system administration. +## files +- ConfigProfilesPage.tsx | Renders a responsive configuration profiles management page with sidebar list and editor panel for desktop, and a dedicated mobile view for creating, editing, and managing config profiles. | exp: ConfigProfilesPage | dep: react, ../components/data-states, ../hooks/use-mobile-viewport, ../hooks/use-config-profiles, ../components/features/config-profiles/ConfigProfileListSidebar, ../components/features/config-profiles/ConfigProfileEditorPanel, ../components/features/config-profiles/ConfigProfilesMobileView +- DashboardPage.test.tsx | Tests the DashboardPage (HomePage) component's rendering, loading states, and error handling with retry functionality. | dep: @testing-library/react, react-router-dom, vitest, ./DashboardPage, ../state/sessions, ../state/session-operations, ../api/dashboard, ../api/sessions, ../api/projects, ../api/git-repositories, ../api/tool-types +- DashboardPage.tsx | Renders a dashboard homepage that displays workspace overview, active/recent sessions, summary statistics, and polling health checks for running instances. | exp: HomePage | dep: react, react-router-dom, ../api/dashboard, ../api/sessions, ../components/data-states, ../components/features/session/session-list, ../hooks/use-instance-actions, ../state/sessions +- GitHistoryPage.tsx | Renders a Git commit history page with branch selection, commit list with graph visualization, and a detail panel showing commit metadata, stats, and diffs. | exp: GitHistoryPage | dep: react, react-router-dom, ../api/git-repositories, ../components/data-states, ../components/icon, ../hooks/use-async-data +- GitRepositoriesPage.tsx | Displays and manages a project's Git repositories with CRUD operations including listing, creating, navigating to history, and deleting with confirmation | exp: GitRepositoriesPage | dep: react, react-router-dom, ../api/git-repositories, ../components/data-states, ../components/icon, ../components/features/project/repository-create-dialog, ../hooks/use-async-data +- PlaceholderPage.tsx | Exports three simple React page components (PlaceholderPage, NotFoundPage, LoginRedirectPage) for a frontend scaffold. | exp: PlaceholderPage, NotFoundPage, LoginRedirectPage | dep: ../components/icon, React +- ProfilePage.tsx | A React component that displays and allows editing of a user profile, including name, email, and avatar upload with validation. | exp: ProfilePage | dep: react, ../api/profile, ../components/data-states, ../components/icon, ../state/auth, ../hooks/use-async-data +- ProjectSettingsPage.tsx | Renders a project settings page with tabbed navigation for general settings, repositories, and members, including project data fetching, editing, and deletion capabilities. | exp: ProjectSettingsPage | dep: react, react-router-dom, ../components/features/settings/settings-tab-layout, ../components/features/project/repositories-settings-tab, ../api/client, ../types +- ProjectsPage.test.tsx | Unit tests for the ProjectsPage component covering loading, empty, error, create, edit, and delete states with API mocking. | dep: @testing-library/react, react-router-dom, vitest, ./ProjectsPage, ../api/projects, ProjectsPage +- ProjectsPage.tsx | Renders a responsive projects management page with separate mobile and desktop layouts, supporting project CRUD operations, repository creation, and workspace management. | exp: ProjectsPage | dep: react, ../components/data-states, ../components/icon, ../hooks/use-mobile-viewport, ../components/features/project/ProjectCard, ../components/features/project/ProjectDialog, ../components/features/project/repository-create-dialog, ../components/features/mobile/mobile-list-view, ../components/features/mobile/mobile-fab, ../hooks/use-projects, ../types +- RepoWorkspacePage.tsx | Renders a repository workspace page with loading/error/empty states and a responsive layout for managing repositories, branches, and git operations. | exp: RepoWorkspace | dep: react, react-router-dom, ../components/data-states, ../hooks/use-mobile-viewport, ../hooks/use-repo-workspace, ../components/features/workspace/workspace-header, ../components/features/workspace/WorkspaceLayout +- SessionsPage.tsx | Renders a sessions management page that displays, polls health for, and handles CRUD operations on development environment sessions with dirty delete confirmation. | exp: SessionsPage | dep: react, ../api/sessions, ../api/settings, ../components/data-states, ../components/features/session/session-list, ../components/features/session/session-card, ../hooks/use-instance-actions, ../state/sessions +- SettingsPage.tsx | A React settings page component that loads, displays, and manages user configuration with tabbed navigation and nested outlet for child routes. | exp: SettingsPage | dep: react, react-router-dom, ../api/settings, ../components/data-states, ../hooks/use-async-data, ../components/features/settings/GeneralSettingsTab +- SshKeysPage.tsx | React page component for managing SSH keys including generation, listing, signing, verification, and deletion | exp: SSHKeysPage | dep: react-router-dom, ../components/data-states, ../hooks/use-ssh-keys, ../components/features/ssh-keys/SSHKeyCreateForm, ../components/features/ssh-keys/SSHKeyList +- TerminalPage.tsx | Renders a responsive terminal page that switches between mobile and desktop views based on device type, managing terminal sessions and their interactions. | exp: TerminalPage | dep: react, ../hooks/use-terminal-page, ../components/features/terminal/MobileTerminalView, ../components/features/terminal/DesktopTerminalView, useTerminalPage hook, MobileTerminalView, DesktopTerminalView +- ToolWorkshopPage.tsx | Renders a responsive tool workshop page with sidebar/editor layout for desktop and tabbed mobile view for managing tool types | exp: ToolWorkshopPage | dep: ../components/data-states, ../hooks/use-mobile-viewport, ../hooks/use-tool-workshop, ../components/features/tool-workshop/ToolTypeListSidebar, ../components/features/tool-workshop/ToolTypeEditorPanel, ../components/features/tool-workshop/ToolWorkshopMobileView, react, use-mobile-viewport, use-tool-workshop, data-states, ToolTypeListSidebar, ToolTypeEditorPanel, ToolWorkshopMobileView +- WorkspaceDetailPage.tsx | Renders a workspace detail page with tabbed navigation for files, git, tools, and settings management. | exp: func:WorkspaceDetailPage(), call:useParams, call:useState, call:useMobileViewport, call:useWorkspaces, call:workspaces.find | dep: react, react-router-dom, ../components/icon, ../hooks/use-workspaces, ../hooks/use-workspace-files, ../hooks/use-workspace-git, ../hooks/use-workspace-instances, ../hooks/use-mobile-viewport, ../components/features/tool/tool-starter, ../api/workspace-files, ../types/workspace +- WorkspacesPage.tsx | Renders a responsive workspaces management page with separate mobile (list/detail/create views) and desktop (grid with cards) layouts, supporting CRUD operations and tool launching. | exp: func:WorkspacesPage(), call:useMobileViewport, call:useState, call:useWorkspaces, call:useWorkspaceActions, call:actions.delete, call:actions.sync, call:setMobileView, call:refresh, call:setStartWorkspace, call:handleDelete, call:setSelectedWorkspace, call:workspaces.map, call:workspaces.find, call:e.stopPropagation, call:setShowCreate | dep: react, ../components/icon, ../hooks/use-mobile-viewport, ../hooks/use-workspaces, ../hooks/use-workspace-actions, ../components/features/workspace/workspace-card, ../components/features/workspace/workspace-create-form, ../components/features/mobile/mobile-list-view, ../components/features/mobile/mobile-detail-view, ../components/features/mobile/mobile-fab, ../components/features/tool/tool-starter, ../types/workspace +## arch +Follows a page-based routing architecture where each file corresponds to a route endpoint, using responsive conditional rendering patterns (mobile/desktop split layouts), tabbed navigation with nested outlets, polling-based real-time data updates, and container-presentational component separation with embedded data fetching, state management, and CRUD operations directly in page components. +## tags +page, components, workspace, react, features, mobile, hooks, settings +## symbols +- WorkspaceDetailPage +- WorkspacesPage +- ConfigProfilesPage +- HomePage +- GitHistoryPage +- GitRepositoriesPage +- PlaceholderPage +- NotFoundPage +## workflows +- change pages behavior + read: ConfigProfilesPage.tsx, DashboardPage.tsx, GitHistoryPage.tsx +- update pages tests + read: DashboardPage.test.tsx, ProjectsPage.test.tsx +## dirty +- diff --git a/apps/web/src/state/.pi-map.index.md b/apps/web/src/state/.pi-map.index.md new file mode 100644 index 0000000..e650614 --- /dev/null +++ b/apps/web/src/state/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/web/src/state (index) +dir: apps/web/src/state + +## role +Centralized React state management layer providing application-wide contexts for authentication, real-time events, notifications, session operations, user sessions, and toast notifications. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- auth.tsx +- events.tsx +- notifications.tsx +- session-operations.tsx +- sessions.tsx +- toast.tsx +## links +index: apps/web/src/state/.pi-map.index.md +map: apps/web/src/state/.pi-map.md +## workflows +- change state behavior + read: auth.tsx, events.tsx, notifications.tsx +## dirty +- diff --git a/apps/web/src/state/.pi-map.md b/apps/web/src/state/.pi-map.md new file mode 100644 index 0000000..5213a8a --- /dev/null +++ b/apps/web/src/state/.pi-map.md @@ -0,0 +1,32 @@ +# apps/web/src/state +dir: apps/web/src/state + +index: apps/web/src/state/.pi-map.index.md + +## role +Centralized React state management layer providing application-wide contexts for authentication, real-time events, notifications, session operations, user sessions, and toast notifications. +## files +- auth.tsx | Provides React authentication context for managing user session state with login status, user data, and session refresh/logout operations. | exp: AuthProvider, useAuth | dep: react, ../api/client, ../types +- events.tsx | Creates a React context provider for real-time event data with connection status and reconnection tracking | exp: func:EventProvider({ children }: { children: React.ReactNode }), call:useEvents, call:useMemo, func:useEventContext(), call:useContext | dep: react, ../hooks/use-events, ../types/events +- notifications.tsx | Provides a React context provider that manages notification state with optimistic updates, polling, and dropdown-aware fetching. | exp: NotificationContextValue, NotificationContext, func:NotificationProvider({ children, }: { children: React.ReactNode; }), call:useState, call:useRef, call:useCallback, call:getUnreadCount, call:setUnreadCount, call:clearInterval, call:console.error, call:setIsLoading, call:getNotifications, call:setNotifications, call:fetchUnreadCount, call:setInterval, call:fetchList, call:useEffect, call:stopPolling, call:startPolling, call:document.addEventListener, call:document.removeEventListener, call:currentNotifications.find, call:currentNotifications.map, call:new Date().toISOString, call:Math.max, call:setError, call:markNotificationRead, call:markAllNotificationsRead, call:currentNotifications.filter, call:dismissNotification, call:clearAllNotifications | dep: react, ../api/notifications, React +- session-operations.tsx | Manages a React context provider for tracking asynchronous instance operations (create, start, stop, etc.) with status updates from event payloads. | exp: OperationType, OperationStatus, Operation, SessionOperationsContextType, SessionOperationsProvider, useSessionOperations | dep: react, ../types/events +- sessions.tsx | Provides a React context that manages user sessions state with server polling, local CRUD operations, and loading/error handling. | exp: SessionsContextType, SessionsProvider, useSessions | dep: react, ../api/sessions +- toast.tsx | Implements a React toast notification system with context-based state management, auto-dismiss timers, and imperative API shortcuts. | exp: ToastSeverity, ToastItem, toast, func:ToastProvider({ children }: { children: React.ReactNode }), call:useState, call:useRef, call:useCallback, call:setToasts, call:prev.filter, call:timersRef.current.get, call:clearTimeout, call:timersRef.current.delete, call:Date.now, call:setTimeout, call:removeToast, call:timersRef.current.set, call:useEffect, call:addToast, func:useToast(), call:useContext, raise:Error | dep: react, React +## arch +Context-based state architecture using React Context API with providers for dependency injection, combining optimistic updates, server polling, event-driven updates, and imperative APIs for cross-cutting concerns. +## tags +call:use, context, toast, provider, react, call:set, notification, operations +## symbols +- EventProvider +- useEventContext +- NotificationProvider +- ToastProvider +- useToast +- AuthProvider +- useAuth +- call:useEvents +## workflows +- change state behavior + read: auth.tsx, events.tsx, notifications.tsx +## dirty +- diff --git a/apps/web/src/styles/.pi-map.index.md b/apps/web/src/styles/.pi-map.index.md new file mode 100644 index 0000000..157fb88 --- /dev/null +++ b/apps/web/src/styles/.pi-map.index.md @@ -0,0 +1,24 @@ +# apps/web/src/styles (index) +dir: apps/web/src/styles + +## role +Houses the complete CSS styling system for a web application, providing global styles, design tokens, syntax highlighting, and utility classes. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- apps/web/src/styles/pages + index: apps/web/src/styles/pages/.pi-map.index.md + map: apps/web/src/styles/pages/.pi-map.md +## files +- global.css +- syntax-highlight.css +- tokens.css +- utilities.css +## links +index: apps/web/src/styles/.pi-map.index.md +map: apps/web/src/styles/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/web/src/styles/.pi-map.md b/apps/web/src/styles/.pi-map.md new file mode 100644 index 0000000..ab1a9c3 --- /dev/null +++ b/apps/web/src/styles/.pi-map.md @@ -0,0 +1,22 @@ +# apps/web/src/styles +dir: apps/web/src/styles + +index: apps/web/src/styles/.pi-map.index.md + +## role +Houses the complete CSS styling system for a web application, providing global styles, design tokens, syntax highlighting, and utility classes. +## files +- global.css | Defines global CSS styles for a web application shell layout, navigation, cards, forms, dialogs, settings pages, and responsive design patterns. | dep: CSS custom properties (CSS variables: --border, --panel, --brand, --muted, --ink, --bg, --danger, --success, --warning, --font-size-xs, --font-size-sm, --space-2, --space-3, --space-4, --space-5) +- syntax-highlight.css | Stylesheet for a syntax highlighting component with toolbar, line numbers, code display, and Prism.js theme integration | dep: Prism.js +- tokens.css | Defines a comprehensive CSS design token system with light/dark themes, spacing scales, breakpoints, and fluid typography for a web application. +- utilities.css | Provides a comprehensive responsive CSS utility system including layout primitives, mobile-first breakpoints, terminal styling, session management UI, and touch-target accessibility patterns for a web application. | dep: CSS custom properties (var(--space-*), var(--border), var(--bg), var(--primary), var(--danger), etc.), xterm.js (terminal rendering) +## arch +Layered CSS architecture using design tokens (tokens.css), global base styles (global.css), component-specific styles (syntax-highlight.css), and utility-first responsive utilities (utilities.css) with light/dark theme support and mobile-first breakpoints. +## tags +space, var(, global, css, web, application, syntax, defines +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/web/src/styles/pages/.pi-map.index.md b/apps/web/src/styles/pages/.pi-map.index.md new file mode 100644 index 0000000..ecd54db --- /dev/null +++ b/apps/web/src/styles/pages/.pi-map.index.md @@ -0,0 +1,25 @@ +# apps/web/src/styles/pages (index) +dir: apps/web/src/styles/pages + +## role +Contains page-specific CSS stylesheets for distinct application views in the web frontend. +## parent +index: apps/web/src/styles/.pi-map.index.md +map: apps/web/src/styles/.pi-map.md +## children +- +## files +- git-history.css +- projects.css +- repo-workspace.css +- sessions.css +- ssh-keys.css +- workspace-detail.css +- workspaces.css +## links +index: apps/web/src/styles/pages/.pi-map.index.md +map: apps/web/src/styles/pages/.pi-map.md +## workflows +- +## dirty +- diff --git a/apps/web/src/styles/pages/.pi-map.md b/apps/web/src/styles/pages/.pi-map.md new file mode 100644 index 0000000..bd7cdd6 --- /dev/null +++ b/apps/web/src/styles/pages/.pi-map.md @@ -0,0 +1,25 @@ +# apps/web/src/styles/pages +dir: apps/web/src/styles/pages + +index: apps/web/src/styles/pages/.pi-map.index.md + +## role +Contains page-specific CSS stylesheets for distinct application views in the web frontend. +## files +- git-history.css | Stylesheet for a Git history visualization page with commit list, branch selector, and detail panel layout | dep: CSS custom properties (var(--border), var(--panel), var(--ink), var(--brand), var(--muted)) +- projects.css | Stylesheet for a projects page UI featuring expandable project toggles, repository listings, workspace grids, and repository creation radio controls. | dep: CSS custom properties (variables) +- repo-workspace.css | Stylesheet for a repository workspace UI with git integration, file management, and code editing components | dep: CSS custom properties (variables), IBM Plex Mono font +- sessions.css | Stylesheet for session management UI components including cards, dropdowns, forms, and responsive mobile layouts. | dep: CSS custom properties/variables (var(--border), var(--panel), var(--text), var(--space-*), var(--danger), var(--color-border)) +- ssh-keys.css | Styles a responsive SSH key list component that stacks vertically on mobile and switches to horizontal layout on larger screens | dep: CSS custom properties (var(--space-3), var(--space-2), var(--space-4), var(--bg), var(--border)) +- workspace-detail.css | Stylesheet for a workspace detail page with tabbed interface including files, git, tools, and settings views, plus a workspace creation form | dep: CSS custom properties (variables for colors, spacing, typography) +- workspaces.css | Stylesheet for a workspaces page featuring a responsive grid of workspace cards with status badges, hover effects, and mobile adaptations. | dep: CSS custom properties (var(--space-*), var(--border), var(--panel), var(--muted), var(--success), var(--warning), var(--danger)) +## arch +Modular page-scoped styling architecture with responsive design patterns (mobile-first breakpoints, grid/flex layouts, component-based organization) and consistent UI system conventions (cards, tabs, forms, badges, hover states). +## tags +var(, workspace, stylesheet, git, space, page, detail, history +## symbols +- +## workflows +- +## dirty +- diff --git a/apps/web/src/test/.pi-map.index.md b/apps/web/src/test/.pi-map.index.md new file mode 100644 index 0000000..ad990ba --- /dev/null +++ b/apps/web/src/test/.pi-map.index.md @@ -0,0 +1,20 @@ +# apps/web/src/test (index) +dir: apps/web/src/test + +## role +Provides shared testing infrastructure and configuration for the web application's test suite +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- setup.ts +## links +index: apps/web/src/test/.pi-map.index.md +map: apps/web/src/test/.pi-map.md +## workflows +- change test behavior + read: setup.ts +## dirty +- diff --git a/apps/web/src/test/.pi-map.md b/apps/web/src/test/.pi-map.md new file mode 100644 index 0000000..e429fb4 --- /dev/null +++ b/apps/web/src/test/.pi-map.md @@ -0,0 +1,20 @@ +# apps/web/src/test +dir: apps/web/src/test + +index: apps/web/src/test/.pi-map.index.md + +## role +Provides shared testing infrastructure and configuration for the web application's test suite +## files +- setup.ts | Configures Vitest testing environment with Jest DOM matchers for enhanced DOM assertions | dep: @testing-library/jest-dom/vitest +## arch +Minimal utility module pattern - single configuration file exporting Vitest setup with Jest DOM matchers integration +## tags +dom, vitest, jest, setup, configures, testing, environment, matchers +## symbols +- +## workflows +- change test behavior + read: setup.ts +## dirty +- diff --git a/apps/web/src/types/.pi-map.index.md b/apps/web/src/types/.pi-map.index.md new file mode 100644 index 0000000..b77a684 --- /dev/null +++ b/apps/web/src/types/.pi-map.index.md @@ -0,0 +1,21 @@ +# apps/web/src/types (index) +dir: apps/web/src/types + +## role +Defines shared TypeScript type definitions and interfaces for data models used across the web application. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- events.ts +- workspace.ts +## links +index: apps/web/src/types/.pi-map.index.md +map: apps/web/src/types/.pi-map.md +## workflows +- change types behavior + read: events.ts, workspace.ts +## dirty +- diff --git a/apps/web/src/types/.pi-map.md b/apps/web/src/types/.pi-map.md new file mode 100644 index 0000000..45d8f2e --- /dev/null +++ b/apps/web/src/types/.pi-map.md @@ -0,0 +1,25 @@ +# apps/web/src/types +dir: apps/web/src/types + +index: apps/web/src/types/.pi-map.index.md + +## role +Defines shared TypeScript type definitions and interfaces for data models used across the web application. +## files +- events.ts | Defines TypeScript interfaces for instance event metadata and payload structures used in event-driven system communication. | exp: InstanceEventMetadata, InstanceEventPayload +- workspace.ts | Defines TypeScript interfaces for workspace data models, requests, and sync results in a workspace management feature. | exp: Workspace, CreateWorkspaceRequest, SyncResult +## arch +Simple barrel-style type package with domain-oriented interface modules (events, workspace) for compile-time type safety and API contract enforcement. +## tags +workspace, event, instance, metadata, payload, sync, defines, typescript +## symbols +- InstanceEventMetadata +- InstanceEventPayload +- Workspace +- CreateWorkspaceRequest +- SyncResult +## workflows +- change types behavior + read: events.ts, workspace.ts +## dirty +- diff --git a/apps/web/src/utils/.pi-map.index.md b/apps/web/src/utils/.pi-map.index.md new file mode 100644 index 0000000..3fb2712 --- /dev/null +++ b/apps/web/src/utils/.pi-map.index.md @@ -0,0 +1,23 @@ +# apps/web/src/utils (index) +dir: apps/web/src/utils + +## role +Shared utility functions providing cross-cutting concerns for error handling, icon types, syntax highlighting, and time formatting across the web application. +## parent +index: apps/web/src/.pi-map.index.md +map: apps/web/src/.pi-map.md +## children +- +## files +- errors.ts +- icons.ts +- language.ts +- time.ts +## links +index: apps/web/src/utils/.pi-map.index.md +map: apps/web/src/utils/.pi-map.md +## workflows +- change utils behavior + read: errors.ts, icons.ts, language.ts +## dirty +- diff --git a/apps/web/src/utils/.pi-map.md b/apps/web/src/utils/.pi-map.md new file mode 100644 index 0000000..9291bab --- /dev/null +++ b/apps/web/src/utils/.pi-map.md @@ -0,0 +1,30 @@ +# apps/web/src/utils +dir: apps/web/src/utils + +index: apps/web/src/utils/.pi-map.index.md + +## role +Shared utility functions providing cross-cutting concerns for error handling, icon types, syntax highlighting, and time formatting across the web application. +## files +- errors.ts | Extracts a human-readable error message from an unknown error object, specifically handling axios-style errors with string or array detail fields | exp: extractErrorMessage +- icons.ts | Re-exports the IconName type from the icon component for external consumption | dep: ../components/icon +- language.ts | Maps file extensions to Prism.js language identifiers and provides utilities for syntax highlighting with lazy language loading. | exp: detectLanguage, highlightCode, loadLanguage | dep: prismjs +- time.ts | Formats a date string into a human-readable relative time string (e.g., "2h ago", "3d ago") | exp: func:formatRelativeTime(dateStr: string) → string, call:Math.max, call:Math.floor, call:now.getTime, call:date.getTime +## arch +Flat barrel-style utility module with pure functions, lazy loading for heavy dependencies (Prism), and thin abstraction layers over third-party libraries. +## tags +time, language, error, message, errors, string, relative, human +## symbols +- formatRelativeTime +- extractErrorMessage +- detectLanguage +- highlightCode +- loadLanguage +- call:Math.max +- call:Math.floor +- call:now.getTime +## workflows +- change utils behavior + read: errors.ts, icons.ts, language.ts +## dirty +- diff --git a/docs/.pi-map.index.md b/docs/.pi-map.index.md new file mode 100644 index 0000000..334db75 --- /dev/null +++ b/docs/.pi-map.index.md @@ -0,0 +1,42 @@ +# docs (index) +dir: docs + +## role +Central documentation hub and knowledge base for the Headquarter platform, providing navigation and access to all project guides, API references, and technical resources. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- docs/api + index: docs/api/.pi-map.index.md + map: docs/api/.pi-map.md +- docs/architecture + index: docs/architecture/.pi-map.index.md + map: docs/architecture/.pi-map.md +- docs/deployment + index: docs/deployment/.pi-map.index.md + map: docs/deployment/.pi-map.md +- docs/development + index: docs/development/.pi-map.index.md + map: docs/development/.pi-map.md +- docs/features + index: docs/features/.pi-map.index.md + map: docs/features/.pi-map.md +- docs/guides + index: docs/guides/.pi-map.index.md + map: docs/guides/.pi-map.md +- docs/superpowers + index: docs/superpowers/.pi-map.index.md + map: docs/superpowers/.pi-map.md +- docs/templates + index: docs/templates/.pi-map.index.md + map: docs/templates/.pi-map.md +## files +- README.md +## links +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/.pi-map.md b/docs/.pi-map.md new file mode 100644 index 0000000..a81d6fc --- /dev/null +++ b/docs/.pi-map.md @@ -0,0 +1,19 @@ +# docs +dir: docs + +index: docs/.pi-map.index.md + +## role +Central documentation hub and knowledge base for the Headquarter platform, providing navigation and access to all project guides, API references, and technical resources. +## files +- README.md | Serves as the main index and navigation hub for the Headquarter platform documentation, organizing links to feature guides, API docs, architecture, deployment, and development resources. +## arch +Static documentation structure using markdown-based content organization with hierarchical topic grouping (features, API, architecture, deployment, development) and a single-entry-point index pattern. +## tags +readme, serves, main, index, navigation, hub, headquarter, platform +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/api/.pi-map.index.md b/docs/api/.pi-map.index.md new file mode 100644 index 0000000..91d683a --- /dev/null +++ b/docs/api/.pi-map.index.md @@ -0,0 +1,27 @@ +# docs/api (index) +dir: docs/api + +## role +Provides comprehensive API documentation for a FastAPI-based Headquarter REST API covering authentication, project management, repositories, SSH keys, terminal access, tool types, and user profiles. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- +## files +- README.md +- auth.md +- config-profiles.md +- projects.md +- repositories.md +- ssh-keys.md +- terminal.md +- tool-types.md +- users.md +## links +index: docs/api/.pi-map.index.md +map: docs/api/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/api/.pi-map.md b/docs/api/.pi-map.md new file mode 100644 index 0000000..b52ad8f --- /dev/null +++ b/docs/api/.pi-map.md @@ -0,0 +1,27 @@ +# docs/api +dir: docs/api + +index: docs/api/.pi-map.index.md + +## role +Provides comprehensive API documentation for a FastAPI-based Headquarter REST API covering authentication, project management, repositories, SSH keys, terminal access, tool types, and user profiles. +## files +- README.md | API documentation for a FastAPI-based Headquarter REST API describing authentication, endpoints, and testing | dep: FastAPI, REST API, session cookie authentication, JSON +- auth.md | Documents OAuth2 authentication API endpoints for Authentik-based login flow with session management | dep: Authentik, OAuth2, session cookies +- config-profiles.md | Documents a configuration profile system with git repository mounting capabilities for tool instances, including API endpoints, validation rules, and profile resolution with merge/override semantics. | dep: git repositories, tool instances, container filesystem, SSH keys, glob pattern matching +- projects.md | Documents a REST API for project management with CRUD operations. +- repositories.md | Documents a REST API for managing Git repositories, files, branches, and commits within projects. +- ssh-keys.md | Documents a REST API for managing user SSH keys including listing, generating, and deleting key pairs +- terminal.md | Documents a WebSocket-based Terminal API for interactive terminal access to running tool instance containers with session persistence and heartbeat mechanisms. | dep: WebSocket, HTTP, JSON, UUID, session cookies, terminal/shell emulation +- tool-types.md | Documents REST API endpoints for managing Docker Compose-based tool types with template variable support +- users.md | Documents a REST API for user profile management, avatar uploads, and user-configurable settings. +## arch +Standard REST API documentation structure organized by domain/resource with OAuth2/Authentik authentication, WebSocket for real-time terminal sessions, and git-backed configuration profile system with merge/override semantics. +## tags +api, documents, rest, tool, terminal, endpoints, management, profile +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/architecture/.pi-map.index.md b/docs/architecture/.pi-map.index.md new file mode 100644 index 0000000..10fb05c --- /dev/null +++ b/docs/architecture/.pi-map.index.md @@ -0,0 +1,24 @@ +# docs/architecture (index) +dir: docs/architecture + +## role +Documents the technical architecture and system design for the "Headquarter" full-stack application across all layers. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- docs/architecture/decisions + index: docs/architecture/decisions/.pi-map.index.md + map: docs/architecture/decisions/.pi-map.md +## files +- backend.md +- database.md +- deployment.md +- frontend.md +## links +index: docs/architecture/.pi-map.index.md +map: docs/architecture/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/architecture/.pi-map.md b/docs/architecture/.pi-map.md new file mode 100644 index 0000000..eaadcf5 --- /dev/null +++ b/docs/architecture/.pi-map.md @@ -0,0 +1,22 @@ +# docs/architecture +dir: docs/architecture + +index: docs/architecture/.pi-map.index.md + +## role +Documents the technical architecture and system design for the "Headquarter" full-stack application across all layers. +## files +- backend.md | Documents the layered backend architecture of a FastAPI application with authentication, real-time monitoring, and service management. | dep: FastAPI, SQLAlchemy, asyncpg, Pydantic, Alembic, httpx, pytest, Authentik, Docker +- database.md | Documents the PostgreSQL database schema, relationships, and operational procedures for a "Headquarter" application managing users, projects, git repositories, SSH keys, user configs, and tool types. | dep: PostgreSQL, SQLAlchemy ORM, Alembic, Authentik, Docker Compose +- deployment.md | Documents the containerized deployment architecture, infrastructure components, and operational strategies for a web application called "Headquarter" | dep: Docker, Traefik, React, Vite, nginx, FastAPI, Python 3.11, PostgreSQL 15, Redis 7, Authentik, PgBouncer, alembic +- frontend.md | Documents the frontend architecture for a React-based SPA called "Headquarter" with modular design patterns, real-time SSE events, and OAuth authentication. | dep: React, React Router, Vite, TypeScript, Vitest, React Testing Library, Authentik OAuth +## arch +Markdown-based architectural decision records (ADRs) organized by domain (backend/frontend/database/deployment) using layered architecture patterns for a FastAPI+React+PostgreSQL stack with real-time capabilities and containerized deployment. +## tags +documents, backend, architecture, fastapi, application, alembic, authentik, database +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/architecture/decisions/.pi-map.index.md b/docs/architecture/decisions/.pi-map.index.md new file mode 100644 index 0000000..dc02f43 --- /dev/null +++ b/docs/architecture/decisions/.pi-map.index.md @@ -0,0 +1,20 @@ +# docs/architecture/decisions (index) +dir: docs/architecture/decisions + +## role +Documents key architectural decisions for the project, providing rationale and context for technology choices around authentication and database access patterns. +## parent +index: docs/architecture/.pi-map.index.md +map: docs/architecture/.pi-map.md +## children +- +## files +- adr-001-session-auth.md +- adr-002-async-sqlalchemy.md +## links +index: docs/architecture/decisions/.pi-map.index.md +map: docs/architecture/decisions/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/architecture/decisions/.pi-map.md b/docs/architecture/decisions/.pi-map.md new file mode 100644 index 0000000..a65bc2e --- /dev/null +++ b/docs/architecture/decisions/.pi-map.md @@ -0,0 +1,20 @@ +# docs/architecture/decisions +dir: docs/architecture/decisions + +index: docs/architecture/decisions/.pi-map.index.md + +## role +Documents key architectural decisions for the project, providing rationale and context for technology choices around authentication and database access patterns. +## files +- adr-001-session-auth.md | Documents the architectural decision to use session-based authentication with HMAC-signed httpOnly cookies for OAuth2 flow instead of JWT alternatives | dep: Authentik, Traefik, OAuth2, HMAC-SHA256 +- adr-002-async-sqlalchemy.md | Architecture decision record documenting the choice to use SQLAlchemy 2.0 with async PostgreSQL via asyncpg for an async-capable Python application | dep: SQLAlchemy 2.0, PostgreSQL, asyncpg, Alembic +## arch +Lightweight ADR (Architecture Decision Record) pattern using Markdown files with sequential numbering, each capturing context, decision, consequences, and alternatives considered for major technical choices. +## tags +adr, async, session, sqlalchemy, decision, hmac, oauth2, 001 +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/deployment/.pi-map.index.md b/docs/deployment/.pi-map.index.md new file mode 100644 index 0000000..3826d95 --- /dev/null +++ b/docs/deployment/.pi-map.index.md @@ -0,0 +1,22 @@ +# docs/deployment (index) +dir: docs/deployment + +## role +Provides deployment documentation and operational guides for installing, configuring, and running the Headquarter application in production environments. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- +## files +- authentik.md +- docker.md +- environment.md +- traefik.md +## links +index: docs/deployment/.pi-map.index.md +map: docs/deployment/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/deployment/.pi-map.md b/docs/deployment/.pi-map.md new file mode 100644 index 0000000..4ff0f6f --- /dev/null +++ b/docs/deployment/.pi-map.md @@ -0,0 +1,22 @@ +# docs/deployment +dir: docs/deployment + +index: docs/deployment/.pi-map.index.md + +## role +Provides deployment documentation and operational guides for installing, configuring, and running the Headquarter application in production environments. +## files +- authentik.md | Documents how to configure Authentik as an OAuth2 provider for the Headquarter application | dep: Authentik, Headquarter, OAuth2, Python +- docker.md | Provides deployment instructions for a multi-container "Headquarter" application using Docker Compose in development and production environments | dep: Docker, Docker Compose, FastAPI, React, Vite, PostgreSQL, Redis, Traefik, Alembic, Authentik, Let's Encrypt +- environment.md | Documents all environment variables used by the Headquarter application, including their defaults, construction rules, and security requirements. +- traefik.md | Documents how to configure and deploy Traefik as a reverse proxy with automatic HTTPS for a "Headquarter" application using Docker Compose and Docker labels. | dep: Traefik, Docker, Docker Compose, Let's Encrypt, DNS +## arch +Documentation-as-code approach using Markdown files organized by infrastructure component (reverse proxy, identity provider, container orchestration, configuration management), following a modular microservices deployment pattern with Docker Compose. +## tags +docker, authentik, headquarter, traefik, application, documents, environment, configure +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/development/.pi-map.index.md b/docs/development/.pi-map.index.md new file mode 100644 index 0000000..e15d0e6 --- /dev/null +++ b/docs/development/.pi-map.index.md @@ -0,0 +1,22 @@ +# docs/development (index) +dir: docs/development + +## role +Developer onboarding and contribution standards documentation for the Headquarter full-stack web application project. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- +## files +- contributing.md +- quality-gates.md +- setup.md +- testing.md +## links +index: docs/development/.pi-map.index.md +map: docs/development/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/development/.pi-map.md b/docs/development/.pi-map.md new file mode 100644 index 0000000..b234ccc --- /dev/null +++ b/docs/development/.pi-map.md @@ -0,0 +1,22 @@ +# docs/development +dir: docs/development + +index: docs/development/.pi-map.index.md + +## role +Developer onboarding and contribution standards documentation for the Headquarter full-stack web application project. +## files +- contributing.md | Provides guidelines and workflows for contributing to the Headquarter project | dep: git, ruff, mypy, pytest, npm, React, TypeScript, Python +- quality-gates.md | Defines mandatory quality gates (linting, type checking, testing, security, build) for backend (Python) and frontend (TypeScript) code before merge, including CI/CD integration and IDE setup. | dep: ruff, mypy, pytest, bandit, safety, TypeScript, ESLint, Vitest, pre-commit, npm, make +- setup.md | Provides step-by-step instructions for setting up a full-stack development environment for a FastAPI/React application with PostgreSQL, Redis, and optional Authentik authentication. | dep: Python 3.11+, Node.js 18+, PostgreSQL 15+, Redis 7+, Git, Docker, FastAPI, React, Alembic, uvicorn, npm, Authentik +- testing.md | Documents testing practices, frameworks, and guidelines for both backend (Python/pytest) and frontend (React/Vitest) of a web application called "Headquarter" | dep: pytest, pytest-asyncio, httpx, factory-boy, vitest, react-testing-library, jsdom, playwright, asyncpg, postgresql, authentik, github-actions +## arch +Documentation-as-code approach with structured markdown files covering environment setup, quality assurance gates, testing standards, and contribution workflows for a FastAPI/React/PostgreSQL/Redis stack. +## tags +pytest, react, testing, contributing, npm, typescript, python, quality +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/features/.pi-map.index.md b/docs/features/.pi-map.index.md new file mode 100644 index 0000000..60128a6 --- /dev/null +++ b/docs/features/.pi-map.index.md @@ -0,0 +1,28 @@ +# docs/features (index) +dir: docs/features + +## role +User-facing documentation for features of the "Headquarter" developer platform application, covering authentication, project/repository management, git tools, web-based terminals, and workspace editing. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- +## files +- auth.md +- git-history.md +- projects.md +- repositories.md +- settings.md +- ssh-keys.md +- terminal-troubleshooting.md +- terminal.md +- tool-types.md +- workspace.md +## links +index: docs/features/.pi-map.index.md +map: docs/features/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/features/.pi-map.md b/docs/features/.pi-map.md new file mode 100644 index 0000000..d58e9c6 --- /dev/null +++ b/docs/features/.pi-map.md @@ -0,0 +1,28 @@ +# docs/features +dir: docs/features + +index: docs/features/.pi-map.index.md + +## role +User-facing documentation for features of the "Headquarter" developer platform application, covering authentication, project/repository management, git tools, web-based terminals, and workspace editing. +## files +- auth.md | Documents the OAuth2 authentication system using Authentik for the Headquarter application | dep: Authentik, OAuth2, session cookies +- git-history.md | Documents a Git history visualization UI feature showing commit graphs, branch filtering, and commit details with diff viewing | dep: Git, repositories API, branch selector UI component, diff syntax highlighter +- projects.md | Documentation for project management functionality in a software application called Headquarter +- repositories.md | Documents how to create, manage, and interact with Git repositories within a project-based system | dep: Git, SSH, GitHub, GitLab, API endpoints +- settings.md | Documentation for user settings functionality in a Headquarter application, covering theme preferences, git identity, and default editor configuration. +- ssh-keys.md | Document SSH key management functionality for git authentication in an application +- terminal-troubleshooting.md | Provides troubleshooting guidance for diagnosing and resolving terminal connection and functionality issues in a web-based terminal system | dep: WebSocket, Docker, browser DevTools, API server, terminal session management +- terminal.md | Documents terminal session functionality for browser-based interactive shell access to containerized tool instances +- tool-types.md | Documents how to define, manage, and use development tool types in Headquarter using Docker Compose templates | dep: Docker Compose, YAML, git, VS Code Server, Jupyter Notebook +- workspace.md | Documents a repository workspace file browser interface with repository/branch selection, file tree navigation, file viewing with syntax highlighting, and quick editing capabilities. | dep: Git, Repositories API, Git History, Git Repositories +## arch +Flat markdown documentation structure organized by feature domain, with each file independently documenting a specific subsystem; no code or cross-references, purely descriptive end-user guides for a containerized development environment platform. +## tags +git, terminal, documents, functionality, headquarter, application, ssh, tool +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/guides/.pi-map.index.md b/docs/guides/.pi-map.index.md new file mode 100644 index 0000000..3cb6775 --- /dev/null +++ b/docs/guides/.pi-map.index.md @@ -0,0 +1,19 @@ +# docs/guides (index) +dir: docs/guides + +## role +Provides user-facing documentation for advanced configuration features +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- +## files +- config-profiles-git-mounts.md +## links +index: docs/guides/.pi-map.index.md +map: docs/guides/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/guides/.pi-map.md b/docs/guides/.pi-map.md new file mode 100644 index 0000000..9a880c1 --- /dev/null +++ b/docs/guides/.pi-map.md @@ -0,0 +1,19 @@ +# docs/guides +dir: docs/guides + +index: docs/guides/.pi-map.index.md + +## role +Provides user-facing documentation for advanced configuration features +## files +- config-profiles-git-mounts.md | Documents how to mount files and directories from git repositories into tool instances via config profiles | dep: Git, container runtime (bind mounts), glob pattern matching +## arch +Simple documentation-as-code with markdown files organized by feature topic +## tags +git, config, profiles, mounts, documents, mount, directories, repositories +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/superpowers/.pi-map.index.md b/docs/superpowers/.pi-map.index.md new file mode 100644 index 0000000..c0946a3 --- /dev/null +++ b/docs/superpowers/.pi-map.index.md @@ -0,0 +1,23 @@ +# docs/superpowers (index) +dir: docs/superpowers + +## role +Documentation directory for special capabilities or advanced features of the project. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- docs/superpowers/plans + index: docs/superpowers/plans/.pi-map.index.md + map: docs/superpowers/plans/.pi-map.md +- docs/superpowers/specs + index: docs/superpowers/specs/.pi-map.index.md + map: docs/superpowers/specs/.pi-map.md +## files +## links +index: docs/superpowers/.pi-map.index.md +map: docs/superpowers/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/superpowers/.pi-map.md b/docs/superpowers/.pi-map.md new file mode 100644 index 0000000..449a95b --- /dev/null +++ b/docs/superpowers/.pi-map.md @@ -0,0 +1,18 @@ +# docs/superpowers +dir: docs/superpowers + +index: docs/superpowers/.pi-map.index.md + +## role +Documentation directory for special capabilities or advanced features of the project. +## files +## arch +N/A (empty directory - no files to analyze) +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/superpowers/plans/.pi-map.index.md b/docs/superpowers/plans/.pi-map.index.md new file mode 100644 index 0000000..fa7caa2 --- /dev/null +++ b/docs/superpowers/plans/.pi-map.index.md @@ -0,0 +1,22 @@ +# docs/superpowers/plans (index) +dir: docs/superpowers/plans + +## role +Contains dated implementation planning documents that specify step-by-step technical approaches for major system features and infrastructure setup. +## parent +index: docs/superpowers/.pi-map.index.md +map: docs/superpowers/.pi-map.md +## children +- +## files +- 2024-05-16-docker-infrastructure.md +- 2026-05-17-auth-oauth.md +- 2026-05-17-database-models.md +- 2026-05-24-session-branch-selection.md +## links +index: docs/superpowers/plans/.pi-map.index.md +map: docs/superpowers/plans/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/superpowers/plans/.pi-map.md b/docs/superpowers/plans/.pi-map.md new file mode 100644 index 0000000..1e484ce --- /dev/null +++ b/docs/superpowers/plans/.pi-map.md @@ -0,0 +1,22 @@ +# docs/superpowers/plans +dir: docs/superpowers/plans + +index: docs/superpowers/plans/.pi-map.index.md + +## role +Contains dated implementation planning documents that specify step-by-step technical approaches for major system features and infrastructure setup. +## files +- 2024-05-16-docker-infrastructure.md | Defines a step-by-step implementation plan for setting up a complete Docker-based development infrastructure with multi-service orchestration including PostgreSQL, Redis, Traefik, Authentik, FastAPI backend, and React frontend. | dep: Docker, Docker Compose, Make, Python 3.11, Node.js 20, PostgreSQL, Redis, Traefik, Authentik, FastAPI, React, Vite, nginx, alembic, uvicorn, SQLAlchemy, pydantic, structlog +- 2026-05-17-auth-oauth.md | Implementation plan for adding Authentik-backed OIDC authentication with JWT access tokens and DB-backed refresh tokens to a FastAPI application | dep: FastAPI, SQLAlchemy, Alembic, python-jose, httpx, pytest, Authentik, PostgreSQL +- 2026-05-17-database-models.md | Define an implementation plan for building SQLAlchemy 2.0 async database models, Alembic migrations, and seed data for a FastAPI backend. | dep: SQLAlchemy 2.x, asyncpg, Alembic, pytest, pytest-asyncio, Pydantic Settings, PostgreSQL, FastAPI +- 2026-05-24-session-branch-selection.md | Implementation plan for replacing free-text branch input with a dropdown of available branches and adding "Create new branch" functionality in a session creation form | dep: React, TypeScript, FastAPI, Python, Git subprocess, Pydantic, API client +## arch +Chronological planning document store using markdown files with ISO date prefixes; each plan follows a consistent structure of problem statement, proposed solution, implementation steps, and verification criteria, serving as architectural decision records and work specifications before code implementation. +## tags +05, fastapi, 2026, implementation, plan, docker, postgresql, authentik +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/superpowers/specs/.pi-map.index.md b/docs/superpowers/specs/.pi-map.index.md new file mode 100644 index 0000000..27cb6b4 --- /dev/null +++ b/docs/superpowers/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# docs/superpowers/specs (index) +dir: docs/superpowers/specs + +## role +Contains technical design specifications for planned system features, serving as architectural decision records and implementation blueprints for authentication and session management capabilities. +## parent +index: docs/superpowers/.pi-map.index.md +map: docs/superpowers/.pi-map.md +## children +- +## files +- 2026-05-17-auth-oauth-design.md +- 2026-05-24-session-branch-selection-design.md +## links +index: docs/superpowers/specs/.pi-map.index.md +map: docs/superpowers/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/superpowers/specs/.pi-map.md b/docs/superpowers/specs/.pi-map.md new file mode 100644 index 0000000..67932f1 --- /dev/null +++ b/docs/superpowers/specs/.pi-map.md @@ -0,0 +1,20 @@ +# docs/superpowers/specs +dir: docs/superpowers/specs + +index: docs/superpowers/specs/.pi-map.index.md + +## role +Contains technical design specifications for planned system features, serving as architectural decision records and implementation blueprints for authentication and session management capabilities. +## files +- 2026-05-17-auth-oauth-design.md | Design document for implementing OAuth2/OIDC authentication with Authentik, internal JWT access tokens, and database-backed refresh token rotation. | dep: Authentik, JWKS, JWT, database/PostgreSQL, cookies, pytest, mypy, ruff +- 2026-05-24-session-branch-selection-design.md | Design document for replacing free-text branch input with a dropdown of available branches and adding the ability to create a new local branch at clone time in a session creation UI. | dep: React/TypeScript frontend, Python/FastAPI backend, Git, API client, ToolInstance database model +## arch +Markdown-based design documentation following a date-prefixed naming convention, with each spec detailing problem statements, proposed solutions, data models, API contracts, and security considerations for discrete feature increments. +## tags +design, 2026, 05, branch, session, document, authentik, jwt +## symbols +- +## workflows +- +## dirty +- diff --git a/docs/templates/.pi-map.index.md b/docs/templates/.pi-map.index.md new file mode 100644 index 0000000..c26728e --- /dev/null +++ b/docs/templates/.pi-map.index.md @@ -0,0 +1,21 @@ +# docs/templates (index) +dir: docs/templates + +## role +Provides standardized markdown templates for consistent documentation of APIs, architecture, and features across the project. +## parent +index: docs/.pi-map.index.md +map: docs/.pi-map.md +## children +- +## files +- api-endpoint.md +- architecture.md +- feature-doc.md +## links +index: docs/templates/.pi-map.index.md +map: docs/templates/.pi-map.md +## workflows +- +## dirty +- diff --git a/docs/templates/.pi-map.md b/docs/templates/.pi-map.md new file mode 100644 index 0000000..85854c5 --- /dev/null +++ b/docs/templates/.pi-map.md @@ -0,0 +1,21 @@ +# docs/templates +dir: docs/templates + +index: docs/templates/.pi-map.index.md + +## role +Provides standardized markdown templates for consistent documentation of APIs, architecture, and features across the project. +## files +- api-endpoint.md | Provides a standardized markdown template for documenting REST API endpoints with sections for authentication, requests, responses, and examples. +- architecture.md | Provides a markdown template for documenting system architecture with standardized sections for components, data flow, technology stack, and operational considerations. +- feature-doc.md | Markdown template for documenting software features with standardized sections +## arch +Template library pattern using structured markdown files with predefined section conventions to enforce documentation uniformity and reduce authoring overhead. +## tags +standardized, markdown, template, documenting, api, sections, architecture, provides +## symbols +- +## workflows +- +## dirty +- diff --git a/e2e/.pi-map.index.md b/e2e/.pi-map.index.md new file mode 100644 index 0000000..3d0be48 --- /dev/null +++ b/e2e/.pi-map.index.md @@ -0,0 +1,27 @@ +# e2e (index) +dir: e2e + +## role +Provides automated end-to-end browser testing for the headquarter application using Playwright. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- e2e/tests + index: e2e/tests/.pi-map.index.md + map: e2e/tests/.pi-map.md +## files +- package.json +- playwright.config.ts +## links +index: e2e/.pi-map.index.md +map: e2e/.pi-map.md +## workflows +- change e2e behavior + read: playwright.config.ts +- change e2e config + read: package.json, playwright.config.ts +- explore e2e subdirectories + index: e2e/tests/.pi-map.index.md +## dirty +- diff --git a/e2e/.pi-map.md b/e2e/.pi-map.md new file mode 100644 index 0000000..7e07c04 --- /dev/null +++ b/e2e/.pi-map.md @@ -0,0 +1,25 @@ +# e2e +dir: e2e + +index: e2e/.pi-map.index.md + +## role +Provides automated end-to-end browser testing for the headquarter application using Playwright. +## files +- package.json | Defines an end-to-end testing package for a "headquarter" project using Playwright | dep: @playwright/test +- playwright.config.ts | Configures Playwright test runner with parallel execution, CI-specific settings, and multi-browser project definitions. | dep: @playwright/test +## arch +Test automation framework with parallel execution, CI-optimized configuration, and cross-browser testing matrix (Chromium/Firefox/WebKit). +## tags +package, test, end, project, playwright, @playwright, playwright.config, defines +## symbols +- +## workflows +- change e2e behavior + read: playwright.config.ts +- change e2e config + read: package.json, playwright.config.ts +- explore e2e subdirectories + index: e2e/tests/.pi-map.index.md +## dirty +- diff --git a/e2e/tests/.pi-map.index.md b/e2e/tests/.pi-map.index.md new file mode 100644 index 0000000..1ee988c --- /dev/null +++ b/e2e/tests/.pi-map.index.md @@ -0,0 +1,20 @@ +# e2e/tests (index) +dir: e2e/tests + +## role +End-to-end test suite for authentication flows using Playwright +## parent +index: e2e/.pi-map.index.md +map: e2e/.pi-map.md +## children +- +## files +- login.spec.ts +## links +index: e2e/tests/.pi-map.index.md +map: e2e/tests/.pi-map.md +## workflows +- update tests tests + read: login.spec.ts +## dirty +- diff --git a/e2e/tests/.pi-map.md b/e2e/tests/.pi-map.md new file mode 100644 index 0000000..35acc3a --- /dev/null +++ b/e2e/tests/.pi-map.md @@ -0,0 +1,20 @@ +# e2e/tests +dir: e2e/tests + +index: e2e/tests/.pi-map.index.md + +## role +End-to-end test suite for authentication flows using Playwright +## files +- login.spec.ts | End-to-end tests for authentication flow using Playwright, verifying login page accessibility, OAuth redirect behavior, and protected route enforcement. | dep: @playwright/test +## arch +Specification-style testing with Playwright page object model, covering OAuth redirect flows and route protection guards +## tags +end, login.spec, tests, authentication, flow, playwright, verifying, login +## symbols +- +## workflows +- update tests tests + read: login.spec.ts +## dirty +- diff --git a/openspec/.pi-map.index.md b/openspec/.pi-map.index.md new file mode 100644 index 0000000..c1391c2 --- /dev/null +++ b/openspec/.pi-map.index.md @@ -0,0 +1,40 @@ +# openspec (index) +dir: openspec + +## role +Defines and configures a living documentation methodology and project governance rules for AI-assisted software development. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- openspec/changes + index: openspec/changes/.pi-map.index.md + map: openspec/changes/.pi-map.md +- openspec/designs + index: openspec/designs/.pi-map.index.md + map: openspec/designs/.pi-map.md +- openspec/docs + index: openspec/docs/.pi-map.index.md + map: openspec/docs/.pi-map.md +- openspec/explorations + index: openspec/explorations/.pi-map.index.md + map: openspec/explorations/.pi-map.md +- openspec/proposals + index: openspec/proposals/.pi-map.index.md + map: openspec/proposals/.pi-map.md +- openspec/specs + index: openspec/specs/.pi-map.index.md + map: openspec/specs/.pi-map.md +- openspec/tasks + index: openspec/tasks/.pi-map.index.md + map: openspec/tasks/.pi-map.md +## files +- README.md +- config.yaml +## links +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/.pi-map.md b/openspec/.pi-map.md new file mode 100644 index 0000000..7e64d92 --- /dev/null +++ b/openspec/.pi-map.md @@ -0,0 +1,20 @@ +# openspec +dir: openspec + +index: openspec/.pi-map.index.md + +## role +Defines and configures a living documentation methodology and project governance rules for AI-assisted software development. +## files +- README.md | Documents the OpenSpec methodology for managing software requirements, specifications, and task tracking as living documentation within a project repository. | dep: OpenSpec CLI (@fission-ai/openspec), Docker, SQLAlchemy, Alembic, Authentik, React, TypeScript, Tailwind, Traefik, Jinja2, xterm.js, pytest, mypy, ruff, npm +- config.yaml | Configuration file defining project metadata, technology stack, and software development discipline rules for a Docker-based coding agent management platform | dep: FastAPI, React, Vite, PostgreSQL, SQLAlchemy, Redis, Alembic, pytest, Docker Compose, Traefik, Authentik +## arch +Declarative configuration-driven architecture using YAML-based project metadata and markdown-based specification tracking for human-AI collaborative development workflows. +## tags +software, project, docker, sqlalchemy, alembic, authentik, react, traefik +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/.pi-map.index.md b/openspec/changes/.pi-map.index.md new file mode 100644 index 0000000..02f71a0 --- /dev/null +++ b/openspec/changes/.pi-map.index.md @@ -0,0 +1,74 @@ +# openspec/changes (index) +dir: openspec/changes + +## role +Implements a version control and change tracking system for managing schema evolution and data migrations in the OpenSpec framework. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- openspec/changes/archive + index: openspec/changes/archive/.pi-map.index.md + map: openspec/changes/archive/.pi-map.md +- openspec/changes/backend-frontend-refactoring + index: openspec/changes/backend-frontend-refactoring/.pi-map.index.md + map: openspec/changes/backend-frontend-refactoring/.pi-map.md +- openspec/changes/config-profile-git-mounts + index: openspec/changes/config-profile-git-mounts/.pi-map.index.md + map: openspec/changes/config-profile-git-mounts/.pi-map.md +- openspec/changes/config-profile-includes-ui + index: openspec/changes/config-profile-includes-ui/.pi-map.index.md + map: openspec/changes/config-profile-includes-ui/.pi-map.md +- openspec/changes/config-profile-multi-repo-mounts + index: openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md + map: openspec/changes/config-profile-multi-repo-mounts/.pi-map.md +- openspec/changes/container-monitoring-notifications + index: openspec/changes/container-monitoring-notifications/.pi-map.index.md + map: openspec/changes/container-monitoring-notifications/.pi-map.md +- openspec/changes/git-mount-url-validation + index: openspec/changes/git-mount-url-validation/.pi-map.index.md + map: openspec/changes/git-mount-url-validation/.pi-map.md +- openspec/changes/home-path-expansion + index: openspec/changes/home-path-expansion/.pi-map.index.md + map: openspec/changes/home-path-expansion/.pi-map.md +- openspec/changes/mobile-terminal-ux + index: openspec/changes/mobile-terminal-ux/.pi-map.index.md + map: openspec/changes/mobile-terminal-ux/.pi-map.md +- openspec/changes/mount-specificity-ordering + index: openspec/changes/mount-specificity-ordering/.pi-map.index.md + map: openspec/changes/mount-specificity-ordering/.pi-map.md +- openspec/changes/multi-session-terminal-ux + index: openspec/changes/multi-session-terminal-ux/.pi-map.index.md + map: openspec/changes/multi-session-terminal-ux/.pi-map.md +- openspec/changes/notification-center + index: openspec/changes/notification-center/.pi-map.index.md + map: openspec/changes/notification-center/.pi-map.md +- openspec/changes/persistent-terminal-sessions + index: openspec/changes/persistent-terminal-sessions/.pi-map.index.md + map: openspec/changes/persistent-terminal-sessions/.pi-map.md +- openspec/changes/reorganize-long-files + index: openspec/changes/reorganize-long-files/.pi-map.index.md + map: openspec/changes/reorganize-long-files/.pi-map.md +- openspec/changes/session-list-overhaul + index: openspec/changes/session-list-overhaul/.pi-map.index.md + map: openspec/changes/session-list-overhaul/.pi-map.md +- openspec/changes/ssh-key-mounting + index: openspec/changes/ssh-key-mounting/.pi-map.index.md + map: openspec/changes/ssh-key-mounting/.pi-map.md +- openspec/changes/terminal-fullscreen-unified-header + index: openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md + map: openspec/changes/terminal-fullscreen-unified-header/.pi-map.md +- openspec/changes/working-copies + index: openspec/changes/working-copies/.pi-map.index.md + map: openspec/changes/working-copies/.pi-map.md +- openspec/changes/workspace-first-ui + index: openspec/changes/workspace-first-ui/.pi-map.index.md + map: openspec/changes/workspace-first-ui/.pi-map.md +## files +## links +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/.pi-map.md b/openspec/changes/.pi-map.md new file mode 100644 index 0000000..62df945 --- /dev/null +++ b/openspec/changes/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes +dir: openspec/changes + +index: openspec/changes/.pi-map.index.md + +## role +Implements a version control and change tracking system for managing schema evolution and data migrations in the OpenSpec framework. +## files +## arch +Event-sourced architecture with command pattern for immutable change records, supporting branching/merging semantics and incremental schema transformations. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/.pi-map.index.md b/openspec/changes/archive/.pi-map.index.md new file mode 100644 index 0000000..7c281c4 --- /dev/null +++ b/openspec/changes/archive/.pi-map.index.md @@ -0,0 +1,149 @@ +# openspec/changes/archive (index) +dir: openspec/changes/archive + +## role +Provides historical archive storage for tracked changes, enabling audit trails and rollback capabilities for OpenSpec documents. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- openspec/changes/archive/2025-05-17-oauth-traefik-integration + index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md +- openspec/changes/archive/2025-05-17-user-profile + index: openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-user-profile/.pi-map.md +- openspec/changes/archive/2025-05-18-git-repo-management + index: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md +- openspec/changes/archive/2025-05-18-ssh-key-management + index: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md +- openspec/changes/archive/2025-05-18-test-infrastructure-improvements + index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md +- openspec/changes/archive/2025-05-18-tool-types-definition + index: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md +- openspec/changes/archive/2025-05-18-user-config-management + index: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md +- openspec/changes/archive/2026-05-17-auth-oauth + index: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md +- openspec/changes/archive/2026-05-17-database-models + index: openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-database-models/.pi-map.md +- openspec/changes/archive/2026-05-17-frontend-foundation + index: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md +- openspec/changes/archive/2026-05-17-project-management + index: openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-project-management/.pi-map.md +- openspec/changes/archive/2026-05-18-database-setup-recovery + index: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md + map: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md +- openspec/changes/archive/2026-05-18-simplify-authentik-auth + index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md + map: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md +- openspec/changes/archive/2026-05-19-api-documentation + index: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md +- openspec/changes/archive/2026-05-19-documentation-overhaul + index: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md +- openspec/changes/archive/2026-05-19-file-editor + index: openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-file-editor/.pi-map.md +- openspec/changes/archive/2026-05-19-git-control + index: openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-git-control/.pi-map.md +- openspec/changes/archive/2026-05-19-git-history-visualization + index: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md +- openspec/changes/archive/2026-05-19-repo-workspace + index: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md +- openspec/changes/archive/2026-05-19-responsive-spacing-improvements + index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md +- openspec/changes/archive/2026-05-19-smart-git-url-parsing + index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md +- openspec/changes/archive/2026-05-19-tool-instances + index: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md +- openspec/changes/archive/2026-05-19-tool-terminal + index: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md +- openspec/changes/archive/2026-05-19-universal-icon-system + index: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md +- openspec/changes/archive/2026-05-19-workspace-visual-overhaul + index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md +- openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded + index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md +- openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config + index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md +- openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check + index: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.md +- openspec/changes/archive/2026-05-22-git-repo-working-clones + index: openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.md +- openspec/changes/archive/2026-05-22-instance-health-monitoring + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md +- openspec/changes/archive/2026-05-22-instance-proxy + index: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md +- openspec/changes/archive/2026-05-22-opencode-web-terminal + index: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md +- openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh + index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md +- openspec/changes/archive/2026-05-22-session-management-fixes + index: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md +- openspec/changes/archive/2026-05-22-sessions-hub + index: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md +- openspec/changes/archive/2026-05-22-tool-config-management + index: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md +- openspec/changes/archive/2026-05-22-tool-config-ui-rework + index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md +- openspec/changes/archive/2026-05-22-tool-workshop + index: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md +- openspec/changes/archive/2026-05-22-ui-redesign-home-settings + index: openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.md +- openspec/changes/archive/2026-05-23-remove-built-in-tools + index: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md + map: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md +- openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools + index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md + map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md +- openspec/changes/archive/2026-05-25-add-config-profiles + index: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-app-usability + index: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-pages-overhaul + index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md +## files +## links +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/.pi-map.md b/openspec/changes/archive/.pi-map.md new file mode 100644 index 0000000..a369c0d --- /dev/null +++ b/openspec/changes/archive/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive +dir: openspec/changes/archive + +index: openspec/changes/archive/.pi-map.index.md + +## role +Provides historical archive storage for tracked changes, enabling audit trails and rollback capabilities for OpenSpec documents. +## files +## arch +Append-only immutable storage pattern with timestamp-versioned snapshots, likely using file-based or object-store backend with content-addressable indexing for deduplication. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md new file mode 100644 index 0000000..dd25876 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration (index) +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration + +## role +This package contains planning and design documents for integrating OAuth/Authentik authentication with Traefik reverse proxy deployment into a Docker-based application. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs + index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md new file mode 100644 index 0000000..5d2550b --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration + +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md + +## role +This package contains planning and design documents for integrating OAuth/Authentik authentication with Traefik reverse proxy deployment into a Docker-based application. +## files +- .openspec.yaml | Defines an OpenAPI specification file metadata with schema type and creation date +- design.md | Design document for making a Docker-based application deployable behind an existing Traefik reverse proxy by removing hardcoded URLs and adding environment-based configuration | dep: Docker, Docker Compose, Traefik, Authentik, Python (config.py, auth.py), Vite (frontend) +- proposal.md | Proposes architectural changes to externalize Authentik/domain configuration to environment variables and add Traefik reverse proxy deployment support. +- tasks.md | A task tracking document for externalizing authentication/domain configuration, creating Traefik deployment, updating frontend config, and running verification tests. +## arch +Specification-driven development using OpenAPI metadata, with task-driven implementation planning focused on environment-based configuration externalization and reverse proxy integration patterns. +## tags +traefik, design, configuration, .openspec, document, docker, reverse, proxy +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md new file mode 100644 index 0000000..0fd89bc --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs (index) +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs + +## role +Contains specification documents for OAuth-Traefik integration architecture implemented on 2025-05-17, serving as archived design reference for the project's authentication/authorization infrastructure. +## parent +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/.pi-map.md +## children +- openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth + index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.md +- openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure + index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.md +- openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment + index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md new file mode 100644 index 0000000..47c150e --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs + +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md + +## role +Contains specification documents for OAuth-Traefik integration architecture implemented on 2025-05-17, serving as archived design reference for the project's authentication/authorization infrastructure. +## files +## arch +Specification-driven architecture using archived dated design documents for reverse-proxy-based OAuth integration, likely detailing Traefik middleware configuration patterns for external authentication providers. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md new file mode 100644 index 0000000..d1b31d6 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth (index) +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth + +## role +Defines authentication specifications for OAuth2/OIDC integration with Authentik and secure session management using httpOnly cookies. +## parent +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.md new file mode 100644 index 0000000..1463949 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth + +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/auth-oauth/.pi-map.index.md + +## role +Defines authentication specifications for OAuth2/OIDC integration with Authentik and secure session management using httpOnly cookies. +## files +- spec.md | Specifies modified requirements for OAuth2/OIDC authentication via Authentik and session security with httpOnly cookies | dep: Authentik, Traefik, OAuth2, OIDC +## arch +Specification-driven design using markdown-based requirements documentation for external identity provider integration and browser security patterns. +## tags +oauth2, oidc, authentik, spec, specifies, modified, requirements, authentication +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md new file mode 100644 index 0000000..948519d --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure (index) +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure + +## role +Defines Docker infrastructure requirements for OAuth-Traefik integration using behavior-driven specification examples. +## parent +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.md new file mode 100644 index 0000000..868cfd9 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure + +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/docker-infrastructure/.pi-map.index.md + +## role +Defines Docker infrastructure requirements for OAuth-Traefik integration using behavior-driven specification examples. +## files +- spec.md | Defines modified requirements for Docker Compose setup and environment configuration using specification by example (Gherkin-style scenarios) | dep: Docker Compose, Traefik +## arch +Specification-by-example pattern with Gherkin-style scenarios for declarative infrastructure requirements, separating environment configuration concerns from implementation details. +## tags +spec, defines, modified, requirements, docker, compose, setup, environment +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md new file mode 100644 index 0000000..547e5d0 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment (index) +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment + +## role +Defines infrastructure deployment specifications for Traefik reverse proxy with OAuth integration +## parent +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.md b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.md new file mode 100644 index 0000000..8ba570d --- /dev/null +++ b/openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment +dir: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment + +index: openspec/changes/archive/2025-05-17-oauth-traefik-integration/specs/traefik-deployment/.pi-map.index.md + +## role +Defines infrastructure deployment specifications for Traefik reverse proxy with OAuth integration +## files +- spec.md | Specifies requirements for Traefik Docker Compose deployment configuration and environment variable documentation | dep: Traefik, Docker Compose, Authentik, OIDC +## arch +Markdown-based specification document using declarative configuration patterns for Docker Compose orchestration with environment-driven configuration management +## tags +traefik, spec, specifies, requirements, docker, compose, deployment, configuration +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md b/openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md new file mode 100644 index 0000000..e2e5654 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md @@ -0,0 +1,25 @@ +# openspec/changes/archive/2025-05-17-user-profile (index) +dir: openspec/changes/archive/2025-05-17-user-profile + +## role +Contains archived specification documents for a 2025 user profile feature implementation, capturing design proposals, task tracking, and documentation for an authenticated profile read/update flow with avatar upload. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-17-user-profile/specs + index: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md +## files +- .openspec.yaml +- README.md +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-user-profile/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-user-profile/.pi-map.md b/openspec/changes/archive/2025-05-17-user-profile/.pi-map.md new file mode 100644 index 0000000..be5d52a --- /dev/null +++ b/openspec/changes/archive/2025-05-17-user-profile/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2025-05-17-user-profile +dir: openspec/changes/archive/2025-05-17-user-profile + +index: openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md + +## role +Contains archived specification documents for a 2025 user profile feature implementation, capturing design proposals, task tracking, and documentation for an authenticated profile read/update flow with avatar upload. +## files +- .openspec.yaml | Defines an OpenAPI specification file metadata with schema type and creation date +- README.md | Documents the implementation of an authenticated user profile read/update flow across API and frontend +- design.md | Design document for implementing a user profile management feature with backend API endpoints and frontend page | dep: FastAPI, JWT authentication, cookie-based auth, static file serving, React/frontend framework +- proposal.md | Proposes implementing authenticated user profile management with read/update endpoints, frontend page, and avatar upload functionality. | dep: apps/api/src/api/, apps/web/src/, auth-oauth, User model +- tasks.md | Tracks implementation tasks for a user profile feature across backend API and frontend, with completion status and follow-up notes. +## arch +Documentation-driven specification archive using lightweight YAML metadata, markdown-based design docs (proposal → design → tasks → README progression), and OpenAPI schema conventions for cross-stack (backend API + frontend) feature planning. +## tags +api, user, profile, frontend, design, tasks, .openspec, implementation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md new file mode 100644 index 0000000..f095c64 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2025-05-17-user-profile/specs (index) +dir: openspec/changes/archive/2025-05-17-user-profile/specs + +## role +Contains archived user profile specification documents from a specific date snapshot in the OpenSpec changes tracking system. +## parent +index: openspec/changes/archive/2025-05-17-user-profile/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-user-profile/.pi-map.md +## children +- openspec/changes/archive/2025-05-17-user-profile/specs/user-profile + index: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md + map: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md b/openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md new file mode 100644 index 0000000..8df7559 --- /dev/null +++ b/openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-17-user-profile/specs +dir: openspec/changes/archive/2025-05-17-user-profile/specs + +index: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md + +## role +Contains archived user profile specification documents from a specific date snapshot in the OpenSpec changes tracking system. +## files +## arch +Simple directory-based archival storage using date-scoped namespacing (YYYY-MM-DD-feature) for immutable specification snapshots with no active code architecture. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md b/openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md new file mode 100644 index 0000000..721f68a --- /dev/null +++ b/openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-user-profile/specs/user-profile (index) +dir: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile + +## role +Defines functional specifications for a user profile management system including profile retrieval, updates, and local avatar storage. +## parent +index: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-user-profile/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md +map: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.md b/openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.md new file mode 100644 index 0000000..9794bad --- /dev/null +++ b/openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-17-user-profile/specs/user-profile +dir: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile + +index: openspec/changes/archive/2025-05-17-user-profile/specs/user-profile/.pi-map.index.md + +## role +Defines functional specifications for a user profile management system including profile retrieval, updates, and local avatar storage. +## files +- spec.md | Defines functional specifications for a user profile management system including profile retrieval, updates, and local avatar storage | dep: auth-oauth, User database model, pytest, mypy, ruff, npm/typecheck, npm/lint +## arch +Specification-driven design using markdown-based documentation with date-versioned archiving for change tracking. +## tags +profile, npm, spec, defines, functional, specifications, user, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md b/openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md new file mode 100644 index 0000000..cc1c402 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2025-05-18-git-repo-management (index) +dir: openspec/changes/archive/2025-05-18-git-repo-management + +## role +Defines a git repository management feature specification for creating, listing, cloning, and deleting bare git repositories within projects. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-git-repo-management/specs + index: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md b/openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md new file mode 100644 index 0000000..495b78f --- /dev/null +++ b/openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2025-05-18-git-repo-management +dir: openspec/changes/archive/2025-05-18-git-repo-management + +index: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md + +## role +Defines a git repository management feature specification for creating, listing, cloning, and deleting bare git repositories within projects. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document specifying a bare git repository management system for projects with create/list/clone/delete operations | dep: git, filesystem, database, API, Dockerfile +- proposal.md | Proposes a feature to add git repository creation, cloning, and management capabilities within existing projects | dep: project-management, git, backend API, frontend UI, disk storage +- tasks.md | Project task checklist tracking implementation of a Git repository management feature across backend API, frontend UI, and project integration with verification steps. +## arch +Specification-driven development using OpenSpec schema with phased task tracking (backend API → frontend UI → project integration) across design/proposal/task documents. +## tags +git, management, design, repository, project, creation, .openspec, projects +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md new file mode 100644 index 0000000..ef4d9c4 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2025-05-18-git-repo-management/specs (index) +dir: openspec/changes/archive/2025-05-18-git-repo-management/specs + +## role +Contains dated specification documents for git repository management features planned in the OpenSpec project. +## parent +index: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-git-repo-management/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management + index: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md b/openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md new file mode 100644 index 0000000..6962f5e --- /dev/null +++ b/openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-18-git-repo-management/specs +dir: openspec/changes/archive/2025-05-18-git-repo-management/specs + +index: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md + +## role +Contains dated specification documents for git repository management features planned in the OpenSpec project. +## files +## arch +Time-based archival directory structure using ISO date prefixes for historical spec tracking and change management. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md b/openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md new file mode 100644 index 0000000..2a4f52b --- /dev/null +++ b/openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management (index) +dir: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management + +## role +Defines software requirements for a Git repository management system with CRUD and cascade deletion operations. +## parent +index: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-git-repo-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.md b/openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.md new file mode 100644 index 0000000..8996365 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management +dir: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management + +index: openspec/changes/archive/2025-05-18-git-repo-management/specs/git-repo-management/.pi-map.index.md + +## role +Defines software requirements for a Git repository management system with CRUD and cascade deletion operations. +## files +- spec.md | This file specifies software requirements for a Git repository management system, including creation, cloning, listing, deletion, and cascade deletion features. | dep: git, database, filesystem, HTTP API +## arch +Specification-driven architecture using Markdown-based requirements documents following a dated archival structure. +## tags +git, deletion, spec, specifies, software, requirements, repository, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md b/openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md new file mode 100644 index 0000000..179e6bb --- /dev/null +++ b/openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2025-05-18-ssh-key-management (index) +dir: openspec/changes/archive/2025-05-18-ssh-key-management + +## role +Archive directory preserving the completed implementation plan for a full-stack SSH key management feature with Ed25519 key generation, encrypted storage, and git provider integration. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-ssh-key-management/specs + index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md b/openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md new file mode 100644 index 0000000..31d2ef9 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2025-05-18-ssh-key-management +dir: openspec/changes/archive/2025-05-18-ssh-key-management + +index: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md + +## role +Archive directory preserving the completed implementation plan for a full-stack SSH key management feature with Ed25519 key generation, encrypted storage, and git provider integration. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for implementing an API and UI to manage Ed25519 SSH keys with encrypted private key storage | dep: cryptography (Fernet, Ed25519), database/SSHKey model, frontend UI components, JWT_SECRET (for Fernet key derivation) +- proposal.md | Proposes adding SSH key management functionality (backend API, frontend UI, and Ed25519 key generation with encryption) to enable git operations with external providers. | dep: FastAPI (implied by router pattern), Fernet encryption, Ed25519 cryptography, React/Vue frontend (implied by web app), existing SSHKey model +- tasks.md | A completed task checklist documenting the implementation of a full-stack SSH key management feature with backend API, frontend UI, and verification steps. | dep: FastAPI, cryptography, Pydantic, React, React Router, npm, pytest, ruff, mypy +## arch +Specification-driven development using OpenSpec schema configuration with phased design-proposal-tasks workflow, documenting a full-stack feature from requirements through implementation verification. +## tags +key, design, api, ssh, .openspec, ed25519, management, backend +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md new file mode 100644 index 0000000..3ee6df4 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2025-05-18-ssh-key-management/specs (index) +dir: openspec/changes/archive/2025-05-18-ssh-key-management/specs + +## role +Defines specifications for SSH key management features added to the OpenSpec project on 2025-05-18. +## parent +index: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-ssh-key-management/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management + index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md new file mode 100644 index 0000000..05fdc11 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-18-ssh-key-management/specs +dir: openspec/changes/archive/2025-05-18-ssh-key-management/specs + +index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md + +## role +Defines specifications for SSH key management features added to the OpenSpec project on 2025-05-18. +## files +## arch +Specification-driven architecture using dated archival organization for tracking API/schema changes over time. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md new file mode 100644 index 0000000..23448ef --- /dev/null +++ b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management (index) +dir: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management + +## role +Defines functional requirements for SSH key lifecycle management operations in the OpenSpec project. +## parent +index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-ssh-key-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.md b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.md new file mode 100644 index 0000000..125e5b3 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management +dir: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management + +index: openspec/changes/archive/2025-05-18-ssh-key-management/specs/ssh-key-management/.pi-map.index.md + +## role +Defines functional requirements for SSH key lifecycle management operations in the OpenSpec project. +## files +- spec.md | Defines requirements for SSH key management functionality including generation, listing, display, and deletion +## arch +Specification-driven design using Markdown-based requirements documents with structured feature definitions for generation, listing, display, and deletion operations. +## tags +spec, defines, requirements, ssh, key, management, functionality, including +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md new file mode 100644 index 0000000..03a51eb --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements (index) +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements + +## role +Documents a completed test infrastructure modernization initiative that restructured a backend API project's testing into unit/integration/system tiers with multi-database support and E2E coverage. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs + index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md new file mode 100644 index 0000000..c125e68 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements + +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md + +## role +Documents a completed test infrastructure modernization initiative that restructured a backend API project's testing into unit/integration/system tiers with multi-database support and E2E coverage. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | This file documents the design and migration plan for restructuring a test suite into unit, integration, and system categories with shared fixtures, SQLite/PostgreSQL separation, and E2E coverage. | dep: pytest, pytest-asyncio, SQLite, PostgreSQL, Playwright, Docker, React/Vite, asyncpg, pytest-xdist +- proposal.md | Proposes a comprehensive restructuring of test infrastructure to separate unit/integration/system tests, add shared fixtures, enable SQLite for unit tests, implement transaction rollback isolation, and introduce Playwright E2E testing. | dep: pytest, PostgreSQL, SQLite, Playwright, python-jose, docker, Makefile +- tasks.md | Project task list tracking completed testing infrastructure improvements for a backend API project including test restructuring, shared fixtures, multi-database support, E2E setup, and documentation. | dep: pytest, pytest-asyncio, SQLAlchemy, aiosqlite, PostgreSQL, Playwright, python-jose, TestClient, Makefile +## arch +Specification-driven change management using OpenSpec metadata with design-proposal-tasks workflow; test architecture follows layered pyramid pattern (unit/SQLite, integration/PostgreSQL, system/E2E with Playwright) employing shared fixtures and transaction rollback isolation. +## tags +pytest, sqlite, postgresql, playwright, design, restructuring, test, unit +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md new file mode 100644 index 0000000..478407f --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs (index) +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs + +## role +Contains specification documents for test infrastructure improvements planned for implementation on May 18, 2025. +## parent +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing + index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.md +- openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation + index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.md +- openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization + index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md new file mode 100644 index 0000000..a152f53 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs + +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md + +## role +Contains specification documents for test infrastructure improvements planned for implementation on May 18, 2025. +## files +## arch +Document-based specification storage using dated archival directories with descriptive naming conventions for tracking infrastructure change proposals. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md new file mode 100644 index 0000000..8100be3 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing (index) +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing + +## role +Defines end-to-end testing requirements using Playwright and Makefile integration for a software system. +## parent +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.md new file mode 100644 index 0000000..ea8945c --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing + +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/e2e-testing/.pi-map.index.md + +## role +Defines end-to-end testing requirements using Playwright and Makefile integration for a software system. +## files +- spec.md | Defines requirements for end-to-end testing with Playwright and Makefile test targets for a software system. | dep: Playwright, Makefile, test database +## arch +Specification-driven testing architecture with browser automation (Playwright) and build-tool orchestration (Makefile targets). +## tags +end, playwright, makefile, spec, defines, requirements, testing, test +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md new file mode 100644 index 0000000..5dc94aa --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation (index) +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation + +## role +Defines requirements for shared test fixtures and transaction isolation in a testing infrastructure +## parent +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.md new file mode 100644 index 0000000..a2e1696 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation + +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-isolation/.pi-map.index.md + +## role +Defines requirements for shared test fixtures and transaction isolation in a testing infrastructure +## files +- spec.md | Defines requirements for shared test fixtures and transaction isolation in a testing infrastructure | dep: pytest, SQLAlchemy, TestClient, SQLite, PostgreSQL +## arch +Specification-driven requirements documentation using markdown-based spec files with no implemented code +## tags +spec, defines, requirements, shared, test, fixtures, transaction, isolation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md new file mode 100644 index 0000000..6d243be --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization (index) +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization + +## role +Defines test categorization requirements using pytest markers for backend unit, integration, and system tests. +## parent +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.md b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.md new file mode 100644 index 0000000..a538e08 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization +dir: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization + +index: openspec/changes/archive/2025-05-18-test-infrastructure-improvements/specs/test-organization/.pi-map.index.md + +## role +Defines test categorization requirements using pytest markers for backend unit, integration, and system tests. +## files +- spec.md | Defines requirements for organizing backend tests into unit, integration, and system categories with pytest markers | dep: pytest, pyproject.toml, apps/api/tests/ +## arch +Specification-driven testing architecture using pytest marker-based test organization with three-tier categorization (unit/integration/system). +## tags +tests, pytest, spec, defines, requirements, organizing, backend, unit +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md b/openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md new file mode 100644 index 0000000..0e4494d --- /dev/null +++ b/openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2025-05-18-tool-types-definition (index) +dir: openspec/changes/archive/2025-05-18-tool-types-definition + +## role +Archive directory containing design documents and planning artifacts for a ToolType feature that enables defining and launching development tools via Docker Compose templates. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-tool-types-definition/specs + index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md b/openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md new file mode 100644 index 0000000..ee4f010 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2025-05-18-tool-types-definition +dir: openspec/changes/archive/2025-05-18-tool-types-definition + +index: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md + +## role +Archive directory containing design documents and planning artifacts for a ToolType feature that enables defining and launching development tools via Docker Compose templates. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for implementing a ToolType system that defines development tools via Docker Compose templates with variable substitution | dep: Docker Compose, Jinja2, Alembic, database, API framework, frontend +- proposal.md | Defines a feature proposal for implementing a tool type system with Docker Compose template support to enable launching development tool instances | dep: SQLAlchemy, Docker Compose, apps/api/src/api/tool_types.py, apps/web/src/pages/tool-types.tsx +- tasks.md | Tracks completed development tasks for implementing a ToolType CRUD feature across backend API, frontend UI, and database migration | dep: SQLAlchemy, Alembic, FastAPI, Pydantic, React/TypeScript, pytest, ruff, mypy, npm +## arch +Specification-driven development with phased implementation tracking, using markdown-based design docs (proposal → design → tasks) and OpenSpec schema configuration for a Docker Compose template system with variable substitution. +## tags +defines, design, implementing, development, proposal, tool, api, tasks +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md new file mode 100644 index 0000000..007d0a1 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2025-05-18-tool-types-definition/specs (index) +dir: openspec/changes/archive/2025-05-18-tool-types-definition/specs + +## role +Contains historical specification snapshots documenting the evolution of tool type definitions from May 18, 2025. +## parent +index: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-tool-types-definition/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition + index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md new file mode 100644 index 0000000..56ee35b --- /dev/null +++ b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-18-tool-types-definition/specs +dir: openspec/changes/archive/2025-05-18-tool-types-definition/specs + +index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md + +## role +Contains historical specification snapshots documenting the evolution of tool type definitions from May 18, 2025. +## files +## arch +Versioned archive pattern using date-stamped directories to preserve immutable spec revisions for auditability and rollback. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md new file mode 100644 index 0000000..149a824 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition (index) +dir: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition + +## role +Defines requirements for a ToolType management system that enables CRUD operations and Docker Compose template validation with variable substitution. +## parent +index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-tool-types-definition/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.md b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.md new file mode 100644 index 0000000..da7267c --- /dev/null +++ b/openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition +dir: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition + +index: openspec/changes/archive/2025-05-18-tool-types-definition/specs/tool-types-definition/.pi-map.index.md + +## role +Defines requirements for a ToolType management system that enables CRUD operations and Docker Compose template validation with variable substitution. +## files +- spec.md | Define requirements for a ToolType management system with CRUD API, Docker Compose template validation, and variable substitution | dep: REST API, Docker Compose, YAML parser, UUID, authentication/authorization system +## arch +Specification-driven requirements document using Markdown-based specification format with sections for overview, functional requirements, non-functional requirements, and API definitions. +## tags +spec, define, requirements, tooltype, management, system, crud, api +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md b/openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md new file mode 100644 index 0000000..09a4b21 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2025-05-18-user-config-management (index) +dir: openspec/changes/archive/2025-05-18-user-config-management + +## role +Design and planning package for a JSONB-backed user configuration management feature +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-user-config-management/specs + index: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md b/openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md new file mode 100644 index 0000000..be845b6 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2025-05-18-user-config-management +dir: openspec/changes/archive/2025-05-18-user-config-management + +index: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md + +## role +Design and planning package for a JSONB-backed user configuration management feature +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for a simple key-value user configuration system using PostgreSQL JSONB | dep: PostgreSQL, JSONB +- proposal.md | Proposes a feature to add persistent user preference storage and management through a JSONB-backed config system with API endpoints and frontend settings UI. | dep: database, API, frontend, UserConfig model, AppShell +- tasks.md | Project task tracking document for implementing a user settings/config feature with backend API, frontend UI, and verification steps | dep: SQLAlchemy, Alembic, FastAPI/HTTP endpoints, React/frontend router, Docker Compose, ruff, mypy, pytest, TypeScript tooling +## arch +Specification-driven development with phased implementation (proposal → design → tasks), using OpenSpec schema metadata and PostgreSQL JSONB for flexible schema-less storage +## tags +design, user, jsonb, api, frontend, configuration, .openspec, document +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md b/openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md new file mode 100644 index 0000000..a5d5fca --- /dev/null +++ b/openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2025-05-18-user-config-management/specs (index) +dir: openspec/changes/archive/2025-05-18-user-config-management/specs + +## role +Contains archived specification documents for user configuration management features dated May 18, 2025. +## parent +index: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-user-config-management/.pi-map.md +## children +- openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management + index: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md + map: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.md +## files +## links +index: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md b/openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md new file mode 100644 index 0000000..d8b66eb --- /dev/null +++ b/openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2025-05-18-user-config-management/specs +dir: openspec/changes/archive/2025-05-18-user-config-management/specs + +index: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md + +## role +Contains archived specification documents for user configuration management features dated May 18, 2025. +## files +## arch +Document-based specification storage using date-versioned directory structure with flat file organization for tracking API/schema design decisions. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md b/openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md new file mode 100644 index 0000000..3085359 --- /dev/null +++ b/openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management (index) +dir: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management + +## role +Defines technical specifications for a JSONB-based user configuration management system supporting storage, retrieval, and frontend theme application. +## parent +index: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-user-config-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md +map: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.md b/openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.md new file mode 100644 index 0000000..39fb7bc --- /dev/null +++ b/openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management +dir: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management + +index: openspec/changes/archive/2025-05-18-user-config-management/specs/user-config-management/.pi-map.index.md + +## role +Defines technical specifications for a JSONB-based user configuration management system supporting storage, retrieval, and frontend theme application. +## files +- spec.md | Define system requirements for user configuration storage, retrieval, and frontend theme application using JSONB key-value pairs. +## arch +Specification-driven architecture using JSONB key-value pair storage pattern with separation of concerns between data persistence layer and frontend theme consumption. +## tags +spec, define, system, requirements, user, configuration, storage, retrieval +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md b/openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md new file mode 100644 index 0000000..4758d60 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md @@ -0,0 +1,25 @@ +# openspec/changes/archive/2026-05-17-auth-oauth (index) +dir: openspec/changes/archive/2026-05-17-auth-oauth + +## role +Archive of a 2026-05-17 design proposal for implementing OAuth2/OIDC authentication with Authentik integration in a backend API. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-17-auth-oauth/specs + index: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md +## files +- .openspec.yaml +- README.md +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md b/openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md new file mode 100644 index 0000000..f31bd4d --- /dev/null +++ b/openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2026-05-17-auth-oauth +dir: openspec/changes/archive/2026-05-17-auth-oauth + +index: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md + +## role +Archive of a 2026-05-17 design proposal for implementing OAuth2/OIDC authentication with Authentik integration in a backend API. +## files +- .openspec.yaml | Defines an OpenAPI specification file metadata with schema type and creation date +- README.md | Documents a project that implements OAuth2/OIDC authentication using Authentik with internal JWTs and database-backed refresh tokens | dep: Authentik, OAuth2, OIDC, JWT +- design.md | Design document specifying an OAuth2/OIDC authentication system using Authentik with internal JWT access tokens, DB-backed opaque refresh tokens, and environment-aware cookie policies. | dep: Authentik, Python async SQLAlchemy, Alembic, JWT library, JWKS client, cookie handling library +- proposal.md | Proposes a technical implementation plan for adding production-ready OAuth2/OIDC authentication with Authentik integration, JWT session management, and secure token lifecycle handling to a backend API project. | dep: Authentik, OAuth2/OIDC, JWKS, JWT, database, apps/api/src, config, models, auth services, API routes +- tasks.md | Task tracking document for implementing OIDC/JWT authentication system with refresh tokens in a backend application. | dep: SQLAlchemy, Alembic, Authentik OIDC, pytest, ruff, mypy, asyncpg, PostgreSQL +## arch +Specification-driven design documentation using OpenAPI metadata, with phased implementation planning (proposal → design → tasks → README) for a hybrid token architecture (JWT access tokens + opaque DB-backed refresh tokens) with environment-aware security policies. +## tags +oidc, authentik, oauth2, jwt, authentication, tokens, refresh, design +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md new file mode 100644 index 0000000..254aab7 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-17-auth-oauth/specs (index) +dir: openspec/changes/archive/2026-05-17-auth-oauth/specs + +## role +Contains archived OpenAPI specification files for an OAuth authentication feature change from May 17, 2026, serving as versioned documentation snapshots in the API specification change tracking system. +## parent +index: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-auth-oauth/.pi-map.md +## children +- openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth + index: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md b/openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md new file mode 100644 index 0000000..c4e268e --- /dev/null +++ b/openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-17-auth-oauth/specs +dir: openspec/changes/archive/2026-05-17-auth-oauth/specs + +index: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md + +## role +Contains archived OpenAPI specification files for an OAuth authentication feature change from May 17, 2026, serving as versioned documentation snapshots in the API specification change tracking system. +## files +## arch +Flat directory structure with dated, feature-named archival folders using a timestamped naming convention (YYYY-MM-DD-{feature}) to preserve immutable specification versions for historical reference and auditability. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md b/openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md new file mode 100644 index 0000000..5a1f762 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth (index) +dir: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth + +## role +Defines authentication and authorization requirements for OAuth2/OIDC integration with Authentik identity provider. +## parent +index: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-auth-oauth/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.md b/openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.md new file mode 100644 index 0000000..b7b1652 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth +dir: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth + +index: openspec/changes/archive/2026-05-17-auth-oauth/specs/auth-oauth/.pi-map.index.md + +## role +Defines authentication and authorization requirements for OAuth2/OIDC integration with Authentik identity provider. +## files +- spec.md | Specifies OAuth2/OIDC authentication, session security, token refresh, and logout requirements for a web application using Authentik as the identity provider. | dep: Authentik, JWKS, OAuth2, OIDC, HTTP cookies, database +## arch +Specification-driven architecture using Markdown-based requirements documentation for security and session management patterns. +## tags +oauth2, oidc, authentik, spec, specifies, authentication, session, security +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md b/openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md new file mode 100644 index 0000000..f878390 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2026-05-17-database-models (index) +dir: openspec/changes/archive/2026-05-17-database-models + +## role +Archive of a completed database infrastructure specification for implementing SQLAlchemy 2.0 async ORM models and Alembic migrations for core API entities. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- +## files +- .openspec.yaml +- README.md +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-database-models/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-database-models/.pi-map.md b/openspec/changes/archive/2026-05-17-database-models/.pi-map.md new file mode 100644 index 0000000..44fffd4 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-database-models/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2026-05-17-database-models +dir: openspec/changes/archive/2026-05-17-database-models + +index: openspec/changes/archive/2026-05-17-database-models/.pi-map.index.md + +## role +Archive of a completed database infrastructure specification for implementing SQLAlchemy 2.0 async ORM models and Alembic migrations for core API entities. +## files +- .openspec.yaml | Defines an OpenAPI specification file metadata with schema type and creation date +- README.md | Defines a project for implementing SQLAlchemy database models and Alembic migrations for core entities. | dep: SQLAlchemy, Alembic +- design.md | Defines the database schema design, technology choices, and project structure for an async SQLAlchemy-based PostgreSQL ORM in an API application. | dep: SQLAlchemy 2.0, asyncpg, Alembic, pydantic-settings, PostgreSQL +- proposal.md | Proposes implementing SQLAlchemy 2.0 async database models and Alembic migrations for core entities in the Headquarter platform | dep: SQLAlchemy 2.0, Alembic, asyncpg, pytest, mypy, ruff +- tasks.md | Tracks completed implementation tasks for building a SQLAlchemy-based async database layer with models, migrations, seeding, and testing for an API application. | dep: SQLAlchemy, Alembic, Pydantic-settings, PostgreSQL, pytest, mypy, ruff +## arch +Specification-driven architecture using OpenAPI-style metadata tracking, with phased task-based implementation covering async PostgreSQL SQLAlchemy 2.0 models, Alembic migrations, seeding, and testing patterns. +## tags +sqlalchemy, alembic, database, defines, models, migrations, design, async +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md b/openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md new file mode 100644 index 0000000..54d0b28 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md @@ -0,0 +1,25 @@ +# openspec/changes/archive/2026-05-17-frontend-foundation (index) +dir: openspec/changes/archive/2026-05-17-frontend-foundation + +## role +Archive of a completed frontend foundation specification defining React/TypeScript/Vite application architecture with authentication, routing, and API integration patterns. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-17-frontend-foundation/specs + index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md +## files +- .openspec.yaml +- README.md +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md b/openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md new file mode 100644 index 0000000..49a4d44 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2026-05-17-frontend-foundation +dir: openspec/changes/archive/2026-05-17-frontend-foundation + +index: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md + +## role +Archive of a completed frontend foundation specification defining React/TypeScript/Vite application architecture with authentication, routing, and API integration patterns. +## files +- .openspec.yaml | Defines an OpenAPI specification file metadata with schema type and creation date +- README.md | Defines a project foundation for a frontend application with authentication, routing, and API integration capabilities. +- design.md | Design document outlining the frontend foundation architecture for a React/TypeScript/Vite web app with authenticated routing, responsive shell layout, and API client patterns. | dep: react-router-dom, Axios, React, TypeScript, Vite +- proposal.md | Proposes a frontend foundation for a React/TypeScript web application with authentication, routing, and API integration. | dep: React, TypeScript, Vite, backend auth endpoints (/auth/login, /auth/logout, /auth/me, /auth/refresh) +- tasks.md | Tracks completed frontend development tasks for building an authenticated web application with routing, API integration, and dashboard UI. +## arch +Specification-driven architecture using OpenAPI metadata, layered documentation (proposal → design → tasks), and a modular React/TypeScript/Vite stack with authenticated routing, responsive shell layout, and centralized API client patterns. +## tags +react, frontend, routing, api, typescript, auth, foundation, application +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md new file mode 100644 index 0000000..82a767b --- /dev/null +++ b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-17-frontend-foundation/specs (index) +dir: openspec/changes/archive/2026-05-17-frontend-foundation/specs + +## role +Historical archive of frontend foundation specifications from a specific date snapshot +## parent +index: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-frontend-foundation/.pi-map.md +## children +- openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation + index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md new file mode 100644 index 0000000..f718a82 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-17-frontend-foundation/specs +dir: openspec/changes/archive/2026-05-17-frontend-foundation/specs + +index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md + +## role +Historical archive of frontend foundation specifications from a specific date snapshot +## files +## arch +Flat directory structure with date-versioned specification documents for project documentation tracking +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md new file mode 100644 index 0000000..31ee961 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation (index) +dir: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation + +## role +Defines foundational frontend technical specifications for a React 18+ TypeScript web application including routing, authentication, layout, and HTTP client configuration. +## parent +index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-frontend-foundation/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.md b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.md new file mode 100644 index 0000000..cbf6c2e --- /dev/null +++ b/openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation +dir: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation + +index: openspec/changes/archive/2026-05-17-frontend-foundation/specs/frontend-foundation/.pi-map.index.md + +## role +Defines foundational frontend technical specifications for a React 18+ TypeScript web application including routing, authentication, layout, and HTTP client configuration. +## files +- spec.md | This file specifies frontend requirements for a React 18+ TypeScript web application with routing, authentication, layout, and HTTP client configuration. | dep: React 18+, TypeScript 5+, Vite, React Router, Axios/fetch +## arch +Specification-driven architecture using markdown-based requirements documentation with modular concerns separation (routing, auth, layout, HTTP) for a standards-compliant SPA foundation. +## tags +spec, specifies, frontend, requirements, react, typescript, web, application +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md b/openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md new file mode 100644 index 0000000..4288f08 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md @@ -0,0 +1,25 @@ +# openspec/changes/archive/2026-05-17-project-management (index) +dir: openspec/changes/archive/2026-05-17-project-management + +## role +Archive directory containing historical specification documents for a full-stack project management feature with authentication, ownership, and SSH key integration. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-17-project-management/specs + index: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md +## files +- .openspec.yaml +- README.md +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/.pi-map.md b/openspec/changes/archive/2026-05-17-project-management/.pi-map.md new file mode 100644 index 0000000..99dd898 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2026-05-17-project-management +dir: openspec/changes/archive/2026-05-17-project-management + +index: openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md + +## role +Archive directory containing historical specification documents for a full-stack project management feature with authentication, ownership, and SSH key integration. +## files +- .openspec.yaml | Defines an OpenAPI specification file metadata with schema type and creation date +- README.md | Defines a project management application that implements create, read, update, delete, listing, and ownership workflows across API and frontend layers +- design.md | Design document specifying authenticated project CRUD implementation with ownership rules, default SSH key support, and frontend integration. | dep: auth-oauth, frontend-foundation, backend API routes, JWT, project service layer, repository associations, SSH key system +- proposal.md | Proposes a project management feature implementation covering authenticated CRUD APIs, frontend flows, SSH key integration, and cascading deletion behavior. | dep: authentication, data models, frontend foundation, apps/api/src, apps/web/src +- tasks.md | Tracks completed tasks for implementing full-stack project management features with ownership enforcement and verification checks. +## arch +Specification-driven development using OpenAPI metadata, phased design documents (proposal → design → tasks → README), and cross-layer (API/frontend) CRUD workflow planning with ownership-based access control. +## tags +project, frontend, management, ownership, design, tasks, defines, .openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md new file mode 100644 index 0000000..4e3d329 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-17-project-management/specs (index) +dir: openspec/changes/archive/2026-05-17-project-management/specs + +## role +Contains archived specification documents for project management features from a specific snapshot date (2026-05-17). +## parent +index: openspec/changes/archive/2026-05-17-project-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/.pi-map.md +## children +- openspec/changes/archive/2026-05-17-project-management/specs/git-repo + index: openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.md +- openspec/changes/archive/2026-05-17-project-management/specs/project-management + index: openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.md +- openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys + index: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md + map: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md b/openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md new file mode 100644 index 0000000..16d380d --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-17-project-management/specs +dir: openspec/changes/archive/2026-05-17-project-management/specs + +index: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md + +## role +Contains archived specification documents for project management features from a specific snapshot date (2026-05-17). +## files +## arch +Flat directory structure storing versioned/archived specification files with date-based organizational hierarchy (YYYY-MM-DD-topic format). +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md b/openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md new file mode 100644 index 0000000..f173d07 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-project-management/specs/git-repo (index) +dir: openspec/changes/archive/2026-05-17-project-management/specs/git-repo + +## role +Defines requirements for Git repository lifecycle management tied to project deletion events +## parent +index: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.md b/openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.md new file mode 100644 index 0000000..2e5b4b2 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-project-management/specs/git-repo +dir: openspec/changes/archive/2026-05-17-project-management/specs/git-repo + +index: openspec/changes/archive/2026-05-17-project-management/specs/git-repo/.pi-map.index.md + +## role +Defines requirements for Git repository lifecycle management tied to project deletion events +## files +- spec.md | Defines modified requirements for cascading repository deletion when a project is deleted +## arch +Specification-driven requirements document using markdown-based change tracking for cascading delete operations +## tags +spec, defines, modified, requirements, cascading, repository, deletion, project +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md b/openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md new file mode 100644 index 0000000..e6db94c --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-project-management/specs/project-management (index) +dir: openspec/changes/archive/2026-05-17-project-management/specs/project-management + +## role +Defines requirements for a project management system with CRUD operations, ownership-based access control, and SSH key management. +## parent +index: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.md b/openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.md new file mode 100644 index 0000000..8a51773 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-project-management/specs/project-management +dir: openspec/changes/archive/2026-05-17-project-management/specs/project-management + +index: openspec/changes/archive/2026-05-17-project-management/specs/project-management/.pi-map.index.md + +## role +Defines requirements for a project management system with CRUD operations, ownership-based access control, and SSH key management. +## files +- spec.md | Defines modified requirements for a project management system with CRUD operations, ownership-based access control, and SSH key management +## arch +Specification-driven design using markdown-based requirements documentation with no explicit architectural patterns defined in the provided file. +## tags +management, spec, defines, modified, requirements, project, system, crud +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md b/openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md new file mode 100644 index 0000000..73ec73b --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys (index) +dir: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys + +## role +Defines specification requirements for SSH key management with project-level default key assignment validation rules. +## parent +index: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md +map: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.md b/openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.md new file mode 100644 index 0000000..9d18dc8 --- /dev/null +++ b/openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys +dir: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys + +index: openspec/changes/archive/2026-05-17-project-management/specs/ssh-keys/.pi-map.index.md + +## role +Defines specification requirements for SSH key management with project-level default key assignment validation rules. +## files +- spec.md | Defines modified requirements for SSH key association with project default-key assignment validation +## arch +Markdown-based specification document using requirement-definition pattern with validation constraints and behavioral rules. +## tags +key, spec, defines, modified, requirements, ssh, association, project +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md b/openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md new file mode 100644 index 0000000..59eb3ac --- /dev/null +++ b/openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-18-database-setup-recovery (index) +dir: openspec/changes/archive/2026-05-18-database-setup-recovery + +## role +Archive directory preserving a completed 2026-05-18 specification for database setup and recovery mechanisms in a Dockerized API application. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-18-database-setup-recovery/specs + index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md b/openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md new file mode 100644 index 0000000..b21d261 --- /dev/null +++ b/openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-18-database-setup-recovery +dir: openspec/changes/archive/2026-05-18-database-setup-recovery + +index: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md + +## role +Archive directory preserving a completed 2026-05-18 specification for database setup and recovery mechanisms in a Dockerized API application. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document specifying how to implement automatic database migration running, connection retry logic, and graceful error handling on application startup | dep: SQLAlchemy, Alembic, Docker, async context +- proposal.md | Proposes architectural changes for automatic database initialization, migration management, and seed data handling in a Dockerized API application | dep: alembic, docker-compose, traefik, fastapi/sqlalchemy (implied), postgres (implied) +- tasks.md | Project task checklist tracking completion status of database initialization, error handling, Docker integration, and testing work items. +## arch +Specification-driven design using OpenSpec schema metadata, with phased proposal/design/task documentation tracking database initialization, migration management, connection retry logic, and graceful error handling patterns. +## tags +design, database, handling, docker, .openspec, automatic, migration, error +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md new file mode 100644 index 0000000..9f7c5bc --- /dev/null +++ b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-18-database-setup-recovery/specs (index) +dir: openspec/changes/archive/2026-05-18-database-setup-recovery/specs + +## role +Contains archived database setup and recovery specification documents from May 18, 2026, serving as historical reference for system design decisions. +## parent +index: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-database-setup-recovery/.pi-map.md +## children +- openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization + index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md + map: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md new file mode 100644 index 0000000..fc377be --- /dev/null +++ b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-18-database-setup-recovery/specs +dir: openspec/changes/archive/2026-05-18-database-setup-recovery/specs + +index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md + +## role +Contains archived database setup and recovery specification documents from May 18, 2026, serving as historical reference for system design decisions. +## files +## arch +Simple archival storage pattern using date-based directory hierarchy with flat file organization for immutable specification snapshots. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md new file mode 100644 index 0000000..b99e4a1 --- /dev/null +++ b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization (index) +dir: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization + +## role +Defines behavioral specifications for database initialization and recovery mechanisms using Gherkin-style requirements. +## parent +index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.md b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.md new file mode 100644 index 0000000..28dbafd --- /dev/null +++ b/openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization +dir: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization + +index: openspec/changes/archive/2026-05-18-database-setup-recovery/specs/database-initialization/.pi-map.index.md + +## role +Defines behavioral specifications for database initialization and recovery mechanisms using Gherkin-style requirements. +## files +- spec.md | Defines software requirements for automatic database initialization, connection resilience, seed data management, and startup error messaging using Gherkin-style scenarios. +## arch +Specification-driven development with BDD (Behavior-Driven Development) patterns using Gherkin syntax for executable requirements documentation. +## tags +spec, defines, software, requirements, automatic, database, initialization, connection +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md new file mode 100644 index 0000000..40e11bd --- /dev/null +++ b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-18-simplify-authentik-auth (index) +dir: openspec/changes/archive/2026-05-18-simplify-authentik-auth + +## role +Contains planning and design documents for migrating authentication from JWT tokens to session-based cookies with Authentik/OAuth2 integration. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs + index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md new file mode 100644 index 0000000..443bafb --- /dev/null +++ b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-18-simplify-authentik-auth +dir: openspec/changes/archive/2026-05-18-simplify-authentik-auth + +index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md + +## role +Contains planning and design documents for migrating authentication from JWT tokens to session-based cookies with Authentik/OAuth2 integration. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for migrating a backend authentication system from JWT tokens to session cookies with OAuth2/Authentik integration | dep: Authentik (OAuth2), Redis (optional), backend database, frontend +- proposal.md | Proposes simplifying an Authentik-based authentication system by replacing JWT/token-based auth with session-based cookies | dep: Authentik, OAuth2, session cookies, database user model, frontend auth state +- tasks.md | Project task list for migrating an application from JWT/OIDC authentication to session-based authentication using Authentik | dep: Authentik, Alembic, python-jose, ruff, mypy, pytest +## arch +Documentation-driven architecture using OpenSpec configuration with structured design docs (design, proposal, tasks) following a formal specification and change-management pattern. +## tags +authentik, authentication, design, jwt, session, .openspec, migrating, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md new file mode 100644 index 0000000..cdd46e8 --- /dev/null +++ b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs (index) +dir: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs + +## role +Defines authentication specification for a simplified OAuth2 integration with Authentik using stateless signed session cookies +## parent +index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-simplify-authentik-auth/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.md b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.md new file mode 100644 index 0000000..1a80ed9 --- /dev/null +++ b/openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs +dir: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs + +index: openspec/changes/archive/2026-05-18-simplify-authentik-auth/specs/.pi-map.index.md + +## role +Defines authentication specification for a simplified OAuth2 integration with Authentik using stateless signed session cookies +## files +- spec.md | Defines a simplified OAuth2 authentication flow using Authentik with stateless signed session cookies | dep: Authentik, HMAC-SHA256, OAuth2 +## arch +Specification-driven design with markdown-based technical documentation for authentication flow requirements +## tags +oauth2, authentik, spec, defines, simplified, authentication, flow, stateless +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md b/openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md new file mode 100644 index 0000000..86ba04d --- /dev/null +++ b/openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-api-documentation/.openspec (index) +dir: openspec/changes/archive/2026-05-19-api-documentation/.openspec + +## role +Defines a schema-driven API documentation specification configuration for the OpenSpec changes archive. +## parent +index: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md +## children +- +## files +- config.yaml +## links +index: openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.md b/openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.md new file mode 100644 index 0000000..318e787 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-api-documentation/.openspec +dir: openspec/changes/archive/2026-05-19-api-documentation/.openspec + +index: openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md + +## role +Defines a schema-driven API documentation specification configuration for the OpenSpec changes archive. +## files +- config.yaml | Defines a configuration file specifying a schema-driven API documentation specification +## arch +YAML-based declarative configuration pattern specifying schema metadata for API documentation generation. +## tags +config, defines, configuration, specifying, schema, driven, api, documentation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md b/openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md new file mode 100644 index 0000000..24a51e3 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-19-api-documentation (index) +dir: openspec/changes/archive/2026-05-19-api-documentation + +## role +Planning and design documents for a comprehensive API documentation improvement initiative targeting a FastAPI-based application. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-api-documentation/.openspec + index: openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-api-documentation/.openspec/.pi-map.md +- openspec/changes/archive/2026-05-19-api-documentation/specs + index: openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md b/openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md new file mode 100644 index 0000000..d8c3918 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-19-api-documentation +dir: openspec/changes/archive/2026-05-19-api-documentation + +index: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md + +## role +Planning and design documents for a comprehensive API documentation improvement initiative targeting a FastAPI-based application. +## files +- design.md | Design document outlining API documentation structure, health endpoints, and OpenAPI enhancements for a FastAPI-based application | dep: FastAPI, Pydantic v2, psutil, SQLAlchemy, PostgreSQL, Docker +- proposal.md | Proposes a comprehensive API documentation improvement plan for a FastAPI-based project | dep: FastAPI, OpenAPI/Swagger, ReDoc, Pydantic, apps/api/README.md, docs/architecture/decisions/ +- tasks.md | Project task tracking document for API documentation improvements across health endpoints, endpoint documentation, model documentation, README creation, architecture decisions, and quality gates +## arch +Document-driven planning architecture with three-tier separation: design specifications (design.md), strategic proposals (proposal.md), and task tracking/execution planning (tasks.md), organized by date-based archival structure for change management. +## tags +documentation, api, fastapi, design, document, health, endpoints, openapi +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md new file mode 100644 index 0000000..bc233df --- /dev/null +++ b/openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-api-documentation/specs (index) +dir: openspec/changes/archive/2026-05-19-api-documentation/specs + +## role +Defines API documentation standards and health endpoint specifications for a FastAPI-based project. +## parent +index: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-api-documentation/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.md new file mode 100644 index 0000000..98afe5c --- /dev/null +++ b/openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-api-documentation/specs +dir: openspec/changes/archive/2026-05-19-api-documentation/specs + +index: openspec/changes/archive/2026-05-19-api-documentation/specs/.pi-map.index.md + +## role +Defines API documentation standards and health endpoint specifications for a FastAPI-based project. +## files +- spec.md | Defines API documentation requirements, health endpoint specifications, and documentation standards for a FastAPI-based project | dep: FastAPI, OpenAPI, Pydantic, Swagger UI, ReDoc +## arch +Specification-driven documentation using Markdown-based API contracts with standardized health check patterns. +## tags +documentation, fastapi, spec, defines, api, requirements, health, endpoint +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md b/openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md new file mode 100644 index 0000000..e4d6c50 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-documentation-overhaul (index) +dir: openspec/changes/archive/2026-05-19-documentation-overhaul + +## role +Contains archived planning documents for a 2026 documentation overhaul initiative, including configuration, design, proposal, and task tracking artifacts. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-documentation-overhaul/specs + index: openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md b/openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md new file mode 100644 index 0000000..20c4b1f --- /dev/null +++ b/openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-documentation-overhaul +dir: openspec/changes/archive/2026-05-19-documentation-overhaul + +index: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md + +## role +Contains archived planning documents for a 2026 documentation overhaul initiative, including configuration, design, proposal, and task tracking artifacts. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Defines the structure, templates, and process for overhauling a project's documentation system +- proposal.md | Proposes a comprehensive documentation overhaul for a software project to address gaps in README, feature docs, API docs, deployment guides, and architecture documentation. +- tasks.md | Task tracking document for a comprehensive documentation overhaul project spanning README rewrite, documentation structure creation, feature/API/architecture documentation, deployment/development guides, and finalization +## arch +Document-driven project planning pattern using structured markdown specifications with YAML metadata, following a progression from proposal → design → tasks workflow with explicit schema versioning. +## tags +documentation, project, defines, creation, .openspec, structure, design, comprehensive +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md new file mode 100644 index 0000000..395d70e --- /dev/null +++ b/openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-documentation-overhaul/specs (index) +dir: openspec/changes/archive/2026-05-19-documentation-overhaul/specs + +## role +Archive storage for historical specification documents related to a documentation overhaul initiative dated May 19, 2026. +## parent +index: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-documentation-overhaul/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.md new file mode 100644 index 0000000..722bf1c --- /dev/null +++ b/openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-documentation-overhaul/specs +dir: openspec/changes/archive/2026-05-19-documentation-overhaul/specs + +index: openspec/changes/archive/2026-05-19-documentation-overhaul/specs/.pi-map.index.md + +## role +Archive storage for historical specification documents related to a documentation overhaul initiative dated May 19, 2026. +## files +- spec.md | Specification document outlining requirements, templates, and processes for a comprehensive documentation overhaul of a project management/Git repository web application +## arch +Simple flat-file archival pattern with dated directory structure preserving immutable specification snapshots. +## tags +spec, specification, document, outlining, requirements, templates, processes, comprehensive +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md b/openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md new file mode 100644 index 0000000..767bd15 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-file-editor (index) +dir: openspec/changes/archive/2026-05-19-file-editor + +## role +Archive directory containing historical design documents and specifications for a file editor component that was planned to replace FileViewer with enhanced editing capabilities. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-file-editor/specs + index: openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-file-editor/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-file-editor/.pi-map.md b/openspec/changes/archive/2026-05-19-file-editor/.pi-map.md new file mode 100644 index 0000000..d81fb53 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-file-editor/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-file-editor +dir: openspec/changes/archive/2026-05-19-file-editor + +index: openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md + +## role +Archive directory containing historical design documents and specifications for a file editor component that was planned to replace FileViewer with enhanced editing capabilities. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design specification for a file editor component that replaces FileViewer with view/edit modes, syntax highlighting, and git commit integration | dep: react-simple-code-editor, prismjs, existing API endpoints (GET/POST /projects/{id}/repositories/{id}/files/content) +- proposal.md | Design proposal for adding syntax highlighting and in-browser editing capabilities to a repository file viewer with Git commit integration | dep: react-simple-code-editor, Prism.js, existing PUT /files/content API endpoint +- tasks.md | Project task list tracking implementation phases for a file editor component with syntax highlighting, editing, and commit capabilities | dep: react-simple-code-editor, prismjs, @types/prismjs, TypeScript, ESLint, ruff, mypy +## arch +Document-driven specification pattern using OpenSpec schema metadata, with phased implementation tracking (design → proposal → tasks) for a component featuring dual-mode view/edit architecture, syntax highlighting integration, and git workflow commit integration. +## tags +editor, design, syntax, highlighting, commit, react, simple, code +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md new file mode 100644 index 0000000..c707928 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-file-editor/specs (index) +dir: openspec/changes/archive/2026-05-19-file-editor/specs + +## role +Defines technical specifications and requirements for a web-based file editor with syntax highlighting and git integration +## parent +index: openspec/changes/archive/2026-05-19-file-editor/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-file-editor/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.md new file mode 100644 index 0000000..c7234ec --- /dev/null +++ b/openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-file-editor/specs +dir: openspec/changes/archive/2026-05-19-file-editor/specs + +index: openspec/changes/archive/2026-05-19-file-editor/specs/.pi-map.index.md + +## role +Defines technical specifications and requirements for a web-based file editor with syntax highlighting and git integration +## files +- spec.md | Specifies requirements, API contracts, component interfaces, and testing strategy for a web-based file editor with syntax highlighting and git commit integration | dep: Prism.js, React/TypeScript (implied by interfaces), REST API endpoints, URL routing +## arch +Specification-driven architecture using markdown-based documentation for API contracts, component interfaces, and testing strategies +## tags +spec, specifies, requirements, api, contracts, component, interfaces, testing +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md b/openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md new file mode 100644 index 0000000..f17a57b --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-git-control (index) +dir: openspec/changes/archive/2026-05-19-git-control + +## role +Documents the design and planning for adding Git version control capabilities to a browser-based repository workspace. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-git-control/specs + index: openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-git-control/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-control/.pi-map.md b/openspec/changes/archive/2026-05-19-git-control/.pi-map.md new file mode 100644 index 0000000..a6bcb5b --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-control/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-git-control +dir: openspec/changes/archive/2026-05-19-git-control + +index: openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md + +## role +Documents the design and planning for adding Git version control capabilities to a browser-based repository workspace. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design specification for a Git-based repository management UI with backend API and frontend workspace components | dep: Git, React/TypeScript, REST API, file tree UI components, dialog/modal system +- proposal.md | Proposes adding git control capabilities (branch management, commit, push/pull, merge) to a browser-based repository workspace that currently only provides read-only access | dep: git, repository workspace, file viewer, branch selector, toolbar +- tasks.md | Project task tracking document outlining implementation phases for a Git version control feature in a full-stack application | dep: GitPython, FastAPI, React/Vue frontend, pytest, ruff, mypy +## arch +Specification-driven design with phased task tracking, separating frontend workspace components from backend API services for git operations. +## tags +git, design, .openspec, repository, management, workspace, react, control +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md new file mode 100644 index 0000000..2c10eb3 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-git-control/specs (index) +dir: openspec/changes/archive/2026-05-19-git-control/specs + +## role +Defines REST API and frontend specifications for a Git version control interface supporting branch management, commits, remote sync, and merge operations +## parent +index: openspec/changes/archive/2026-05-19-git-control/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-git-control/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.md new file mode 100644 index 0000000..02ac420 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-git-control/specs +dir: openspec/changes/archive/2026-05-19-git-control/specs + +index: openspec/changes/archive/2026-05-19-git-control/specs/.pi-map.index.md + +## role +Defines REST API and frontend specifications for a Git version control interface supporting branch management, commits, remote sync, and merge operations +## files +- spec.md | Defines a REST API and frontend specification for a Git version control interface enabling branch management, commits, remote sync, and merge operations +## arch +API specification document using Markdown-based documentation pattern with RESTful endpoint definitions and frontend UI component specifications +## tags +spec, defines, rest, api, frontend, specification, git, version +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md b/openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md new file mode 100644 index 0000000..6d9c873 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-git-history-visualization (index) +dir: openspec/changes/archive/2026-05-19-git-history-visualization + +## role +Defines the specification and planning documents for a Git history visualization feature to be built in the project. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-git-history-visualization/specs + index: openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md b/openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md new file mode 100644 index 0000000..d4c9653 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-git-history-visualization +dir: openspec/changes/archive/2026-05-19-git-history-visualization + +index: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md + +## role +Defines the specification and planning documents for a Git history visualization feature to be built in the project. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document specifying architecture, API endpoints, data models, and UI layout for a Git history visualization web application | dep: Git CLI, Backend API, Frontend (SVG rendering), JSON +- proposal.md | Proposes building an interactive git history visualization tool with graph and list views for exploring commit history, branches, and diffs | dep: git CLI, React, SVG +- tasks.md | Project task checklist for building a Git history visualization feature with backend API, frontend components, page integration, and testing phases | dep: Git, Python (backend), TypeScript/JavaScript (frontend), SVG, React/Vue (implied by component structure), HTTP API, Router +## arch +Document-driven specification pattern using OpenSpec schema with structured design docs (design.md, proposal.md, tasks.md) separating architecture definition, feature proposal, and implementation tracking. +## tags +git, history, design, visualization, .openspec, api, git cli, building +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md new file mode 100644 index 0000000..4671e4e --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-git-history-visualization/specs (index) +dir: openspec/changes/archive/2026-05-19-git-history-visualization/specs + +## role +Defines technical specifications for a Git history visualization feature with graph/list views, commit details, and REST API endpoints +## parent +index: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-git-history-visualization/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.md new file mode 100644 index 0000000..8ec20be --- /dev/null +++ b/openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-git-history-visualization/specs +dir: openspec/changes/archive/2026-05-19-git-history-visualization/specs + +index: openspec/changes/archive/2026-05-19-git-history-visualization/specs/.pi-map.index.md + +## role +Defines technical specifications for a Git history visualization feature with graph/list views, commit details, and REST API endpoints +## files +- spec.md | Defines technical specifications for a Git history visualization feature with graph/list views, commit details, and REST API endpoints +## arch +Specification-driven design using markdown-based documentation with RESTful API endpoint definitions and dual-view UI pattern (graph + list) +## tags +spec, defines, technical, specifications, git, history, visualization, feature +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md b/openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md new file mode 100644 index 0000000..27a1519 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-repo-workspace (index) +dir: openspec/changes/archive/2026-05-19-repo-workspace + +## role +Defines an archived OpenSpec design proposal for a repository workspace UI feature that would serve as the default project view for browsing, viewing, and editing Git repository files. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-repo-workspace/specs + index: openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md b/openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md new file mode 100644 index 0000000..8d0110f --- /dev/null +++ b/openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-repo-workspace +dir: openspec/changes/archive/2026-05-19-repo-workspace + +index: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md + +## role +Defines an archived OpenSpec design proposal for a repository workspace UI feature that would serve as the default project view for browsing, viewing, and editing Git repository files. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document specifying a repository workspace UI for browsing, viewing, and editing project files with repo/branch/file navigation, syntax highlighting, and quick edit capabilities. | dep: React, URL routing, REST API, syntax highlighter, virtual scrolling +- proposal.md | Proposes a repository workspace as the default project view with file browsing, branch selection, and file viewing/editing capabilities +- tasks.md | Project task tracking document outlining implementation phases for a Git repository workspace UI with file browsing, editing, and navigation features | dep: git, React/Next.js, FastAPI, prismjs, ruff, mypy, pytest +## arch +Specification-driven design using OpenSpec schema with phased task-based implementation planning, separating concerns into configuration metadata (.openspec.yaml), design specification (design.md), feature proposal (proposal.md), and implementation tracking (tasks.md). +## tags +design, repository, workspace, browsing, editing, project, .openspec, document +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md new file mode 100644 index 0000000..81016bb --- /dev/null +++ b/openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-repo-workspace/specs (index) +dir: openspec/changes/archive/2026-05-19-repo-workspace/specs + +## role +Defines technical specifications for a repository workspace web application with file browsing, branch navigation, and quick editing capabilities +## parent +index: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-repo-workspace/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.md new file mode 100644 index 0000000..cecf2dc --- /dev/null +++ b/openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-repo-workspace/specs +dir: openspec/changes/archive/2026-05-19-repo-workspace/specs + +index: openspec/changes/archive/2026-05-19-repo-workspace/specs/.pi-map.index.md + +## role +Defines technical specifications for a repository workspace web application with file browsing, branch navigation, and quick editing capabilities +## files +- spec.md | Defines technical specifications for a repository workspace web application with file browsing, branch navigation, and quick editing capabilities | dep: React, React Router, URLSearchParams, git backend, syntax highlighting library +## arch +Specification-driven documentation pattern using markdown-based feature requirements and user interface definitions +## tags +spec, defines, technical, specifications, repository, workspace, web, application +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md new file mode 100644 index 0000000..054a82d --- /dev/null +++ b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec (index) +dir: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec + +## role +Defines configuration parameters for a responsive spacing improvements specification snapshot archived on 2026-05-19. +## parent +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md +## children +- +## files +- config.yaml +## links +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.md b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.md new file mode 100644 index 0000000..40a6834 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec +dir: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec + +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md + +## role +Defines configuration parameters for a responsive spacing improvements specification snapshot archived on 2026-05-19. +## files +- config.yaml | Defines a configuration file for a specification-driven project named "responsive-spacing-improvements" +## arch +Simple YAML-based configuration file with no complex architecture; follows declarative single-file configuration pattern for versioned specification storage. +## tags +config, defines, configuration, specification, driven, project, named, responsive +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md new file mode 100644 index 0000000..3ace94a --- /dev/null +++ b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-19-responsive-spacing-improvements (index) +dir: openspec/changes/archive/2026-05-19-responsive-spacing-improvements + +## role +Contains archived design documentation and project tracking artifacts for a responsive spacing and layout improvement initiative. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec + index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.openspec/.pi-map.md +- openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs + index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md new file mode 100644 index 0000000..269d2d2 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-19-responsive-spacing-improvements +dir: openspec/changes/archive/2026-05-19-responsive-spacing-improvements + +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md + +## role +Contains archived design documentation and project tracking artifacts for a responsive spacing and layout improvement initiative. +## files +- design.md | Design document specifying a responsive CSS design system with spacing scales, breakpoints, layout components, and migration strategy for improving responsive behavior across a web application. +- proposal.md | Proposes a comprehensive responsive design system to fix spacing, sizing, and mobile usability issues in a UI +- tasks.md | A completed task checklist documenting a responsive spacing and layout improvement project across CSS foundations, layout utilities, component updates, overflow fixes, touch targets, and quality gates. +## arch +Documentation-driven change management with design specification, formal proposal, and task-based project tracking patterns. +## tags +design, responsive, spacing, layout, css, system, across, proposal +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md new file mode 100644 index 0000000..ec8a3a9 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs (index) +dir: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs + +## role +Defines technical specifications for responsive design system improvements including spacing, typography, and layout patterns. +## parent +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.md new file mode 100644 index 0000000..4c556e9 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs +dir: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs + +index: openspec/changes/archive/2026-05-19-responsive-spacing-improvements/specs/.pi-map.index.md + +## role +Defines technical specifications for responsive design system improvements including spacing, typography, and layout patterns. +## files +- spec.md | Defines a specification for implementing responsive spacing, fluid typography, and mobile-first layout improvements across a web application | dep: CSS custom properties, clamp(), viewport units, media queries, WCAG 2.5.5 +## arch +Markdown-based specification document using plain text standards documentation pattern with no executable code or architectural framework. +## tags +spec, defines, specification, implementing, responsive, spacing, fluid, typography +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md new file mode 100644 index 0000000..ede14f4 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-smart-git-url-parsing (index) +dir: openspec/changes/archive/2026-05-19-smart-git-url-parsing + +## role +Contains archived design documents and specifications for a smart Git URL parsing feature that converts browser URLs to clone URLs during repository creation. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs + index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md new file mode 100644 index 0000000..ad34ef8 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-smart-git-url-parsing +dir: openspec/changes/archive/2026-05-19-smart-git-url-parsing + +index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md + +## role +Contains archived design documents and specifications for a smart Git URL parsing feature that converts browser URLs to clone URLs during repository creation. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for a smart Git URL parsing feature that detects browser URLs from GitHub/GitLab/Bitbucket and converts them to valid clone URLs +- proposal.md | Proposes a feature to intelligently parse and correct malformed Git repository URLs pasted by users during repository creation +- tasks.md | Project task breakdown for implementing smart Git URL parsing across backend and frontend with validation, suggestion, and user confirmation flows | dep: FastAPI, Python, TypeScript, React, ruff, mypy, pytest +## arch +Documentation-driven specification with markdown-based design documents (proposal, design, tasks) and YAML metadata, following a structured change proposal pattern for cross-functional (backend/frontend) feature development. +## tags +design, git, urls, creation, .openspec, smart, url, parsing +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md new file mode 100644 index 0000000..7ca2d78 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs (index) +dir: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs + +## role +Defines a specification for intelligent URL parsing that distinguishes browser URLs from git clone URLs and extracts canonical repository URLs with user confirmation workflows. +## parent +index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-smart-git-url-parsing/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.md new file mode 100644 index 0000000..2637d75 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs +dir: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs + +index: openspec/changes/archive/2026-05-19-smart-git-url-parsing/specs/.pi-map.index.md + +## role +Defines a specification for intelligent URL parsing that distinguishes browser URLs from git clone URLs and extracts canonical repository URLs with user confirmation workflows. +## files +- spec.md | Defines a specification for detecting browser URLs versus git clone URLs and extracting base repository URLs with user confirmation workflows +## arch +Specification-driven design using structured markdown documentation with explicit user-interaction workflows, input/output examples, and decision-tree logic for URL classification and transformation. +## tags +urls, spec, defines, specification, detecting, browser, versus, git +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md b/openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md new file mode 100644 index 0000000..80b52a0 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-instances/.openspec (index) +dir: openspec/changes/archive/2026-05-19-tool-instances/.openspec + +## role +Defines the OpenSpec schema configuration for a specific archived version of tool instances from May 19, 2026. +## parent +index: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md +## children +- +## files +- config.yaml +## links +index: openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.md b/openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.md new file mode 100644 index 0000000..1db80ea --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-instances/.openspec +dir: openspec/changes/archive/2026-05-19-tool-instances/.openspec + +index: openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md + +## role +Defines the OpenSpec schema configuration for a specific archived version of tool instances from May 19, 2026. +## files +- config.yaml | Defines a configuration file specifying a schema type and name for tool instances. +## arch +Simple declarative schema metadata pattern using YAML configuration files to specify schema type and name identifiers. +## tags +config, defines, configuration, specifying, schema, type, name, tool +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md b/openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md new file mode 100644 index 0000000..42fdb3b --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-19-tool-instances (index) +dir: openspec/changes/archive/2026-05-19-tool-instances + +## role +Design and planning documents for a Docker-based development tool instance management system with persistent repository-linked sessions. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-tool-instances/.openspec + index: openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-tool-instances/.openspec/.pi-map.md +- openspec/changes/archive/2026-05-19-tool-instances/specs + index: openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md b/openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md new file mode 100644 index 0000000..1bf37f6 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-19-tool-instances +dir: openspec/changes/archive/2026-05-19-tool-instances + +index: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md + +## role +Design and planning documents for a Docker-based development tool instance management system with persistent repository-linked sessions. +## files +- design.md | Design document specifying a Docker-based tool instance system for launching and managing development environments per repository with lifecycle management and frontend integration. | dep: Docker, Docker Compose, SQLAlchemy/Base, React/useAtom, AppShell, GitRepository, ToolType, Project, User +- proposal.md | Proposes a system for managing Docker-based development tool instances with persistent sessions linked to repositories | dep: Docker Compose, Docker API, GitRepository, ToolType, database +- tasks.md | Project task tracking document for implementing Docker-based tool instance management with backend API, frontend UI, and lifecycle operations | dep: FastAPI, SQLAlchemy, Alembic, Docker, React/TypeScript, Jotai, docker-compose +## arch +Document-driven specification architecture using markdown-based design docs (design.md, proposal.md, tasks.md) to define a containerized tool instance system with backend API, frontend UI, and lifecycle management before implementation. +## tags +docker, design, tool, document, instance, system, managing, development +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md new file mode 100644 index 0000000..e0e80fd --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-instances/specs (index) +dir: openspec/changes/archive/2026-05-19-tool-instances/specs + +## role +Defines technical specifications for a Docker container lifecycle management system for user session tool instances. +## parent +index: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-instances/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.md new file mode 100644 index 0000000..01c2144 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-instances/specs +dir: openspec/changes/archive/2026-05-19-tool-instances/specs + +index: openspec/changes/archive/2026-05-19-tool-instances/specs/.pi-map.index.md + +## role +Defines technical specifications for a Docker container lifecycle management system for user session tool instances. +## files +- spec.md | Defines technical specifications for a tool instance management system that creates, monitors, and controls Docker containers for user sessions with lifecycle operations and status tracking. | dep: Docker, PostgreSQL, REST API, Git repositories, template engine +## arch +Specification-driven architecture using markdown-based technical documentation with lifecycle state management, monitoring, and control operation patterns for containerized workloads. +## tags +docker, spec, defines, technical, specifications, tool, instance, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md b/openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md new file mode 100644 index 0000000..a98311d --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-terminal/.openspec (index) +dir: openspec/changes/archive/2026-05-19-tool-terminal/.openspec + +## role +Defines a versioned schema configuration for a tool-terminal component in the OpenSpec changes archive. +## parent +index: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md +## children +- +## files +- config.yaml +## links +index: openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.md b/openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.md new file mode 100644 index 0000000..be27c11 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-terminal/.openspec +dir: openspec/changes/archive/2026-05-19-tool-terminal/.openspec + +index: openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md + +## role +Defines a versioned schema configuration for a tool-terminal component in the OpenSpec changes archive. +## files +- config.yaml | Defines a basic configuration file specifying a schema type and name for a tool-terminal component. +## arch +Simple declarative configuration using YAML with schema type and name key-value pairs, following a dated archival directory structure for change tracking. +## tags +config, defines, basic, configuration, specifying, schema, type, name +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md b/openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md new file mode 100644 index 0000000..b6947ee --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-19-tool-terminal (index) +dir: openspec/changes/archive/2026-05-19-tool-terminal + +## role +Design and planning documentation for a browser-based terminal interface feature enabling WebSocket-connected Docker container exec access. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-tool-terminal/.openspec + index: openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-tool-terminal/.openspec/.pi-map.md +- openspec/changes/archive/2026-05-19-tool-terminal/specs + index: openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md b/openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md new file mode 100644 index 0000000..0855ff1 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-19-tool-terminal +dir: openspec/changes/archive/2026-05-19-tool-terminal + +index: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md + +## role +Design and planning documentation for a browser-based terminal interface feature enabling WebSocket-connected Docker container exec access. +## files +- design.md | Design document specifying a web-based terminal interface for Docker containers using WebSocket bidirectional streaming with xterm.js frontend and docker exec PTY backend. | dep: WebSocket, Docker, xterm.js, asyncio, subprocess, fcntl, xterm-addon-fit, xterm-addon-web-links +- proposal.md | Proposes a browser-based terminal access system for Docker containers via WebSocket | dep: Docker, WebSocket, xterm.js, pseudo-TTY/PTY +- tasks.md | Project task tracking document for implementing a WebSocket-based terminal feature using xterm.js and Docker exec | dep: FastAPI, WebSocket, asyncio-subprocess, xterm.js, xterm-addon-fit, xterm-addon-web-links, docker, PTY, React/Next.js +## arch +WebSocket bidirectional streaming architecture with xterm.js frontend terminal emulator, Docker exec PTY backend, and task-tracked phased implementation planning. +## tags +xterm, docker, websocket, js, addon, design, web, terminal +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md new file mode 100644 index 0000000..ece3843 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-terminal/specs (index) +dir: openspec/changes/archive/2026-05-19-tool-terminal/specs + +## role +Defines a WebSocket-based terminal protocol specification for browser-based interactive shell sessions in Docker containers. +## parent +index: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-terminal/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.md new file mode 100644 index 0000000..800cfe3 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-tool-terminal/specs +dir: openspec/changes/archive/2026-05-19-tool-terminal/specs + +index: openspec/changes/archive/2026-05-19-tool-terminal/specs/.pi-map.index.md + +## role +Defines a WebSocket-based terminal protocol specification for browser-based interactive shell sessions in Docker containers. +## files +- spec.md | Defines a WebSocket-based terminal specification for spawning interactive shell sessions inside Docker containers via browser-based terminals | dep: FastAPI, asyncio, docker CLI, xterm.js, xterm-addon-fit, xterm-addon-web-links +## arch +Specification-driven protocol design using Markdown documentation with WebSocket transport, terminal emulation, and container runtime integration patterns. +## tags +xterm, addon, spec, defines, websocket, terminal, specification, spawning +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md b/openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md new file mode 100644 index 0000000..f927a5b --- /dev/null +++ b/openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-universal-icon-system/.openspec (index) +dir: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec + +## role +Defines configuration parameters for a specification-driven universal icon system implementation +## parent +index: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md +## children +- +## files +- config.yaml +## links +index: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.md b/openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.md new file mode 100644 index 0000000..8b41938 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-universal-icon-system/.openspec +dir: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec + +index: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md + +## role +Defines configuration parameters for a specification-driven universal icon system implementation +## files +- config.yaml | Defines a basic configuration for a specification-driven universal icon system +## arch +YAML-based declarative configuration pattern for specification-driven icon system design +## tags +config, defines, basic, configuration, specification, driven, universal, icon +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md b/openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md new file mode 100644 index 0000000..e476665 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-19-universal-icon-system (index) +dir: openspec/changes/archive/2026-05-19-universal-icon-system + +## role +Archive of design documents for a universal icon system migration using Phosphor Icons to replace Unicode symbols. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-universal-icon-system/.openspec + index: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-universal-icon-system/.openspec/.pi-map.md +- openspec/changes/archive/2026-05-19-universal-icon-system/specs + index: openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md b/openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md new file mode 100644 index 0000000..941764f --- /dev/null +++ b/openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-19-universal-icon-system +dir: openspec/changes/archive/2026-05-19-universal-icon-system + +index: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md + +## role +Archive of design documents for a universal icon system migration using Phosphor Icons to replace Unicode symbols. +## files +- design.md | Design specification for implementing a centralized icon system using Phosphor icons to replace raw Unicode symbols across a React application | dep: @phosphor-icons/react, React, TypeScript, CSS +- proposal.md | Proposes implementing a universal icon system using Phosphor Icons to replace inconsistent Unicode symbols across a frontend project. | dep: phosphor-react +- tasks.md | Project task list for implementing a universal icon system using Phosphor Icons across a React/TypeScript application | dep: @phosphor-icons/react, React, TypeScript, CSS/SCSS +## arch +Specification-driven planning with separated concerns (design, proposal, tasks) for a React/TypeScript icon standardization effort. +## tags +react, icons, phosphor, design, implementing, icon, system, across +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md new file mode 100644 index 0000000..dfc0556 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-universal-icon-system/specs (index) +dir: openspec/changes/archive/2026-05-19-universal-icon-system/specs + +## role +Defines technical specifications for a universal icon system implementation using Phosphor icons with standardized sizing, registry management, and accessibility compliance. +## parent +index: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-universal-icon-system/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.md new file mode 100644 index 0000000..a3c065c --- /dev/null +++ b/openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-universal-icon-system/specs +dir: openspec/changes/archive/2026-05-19-universal-icon-system/specs + +index: openspec/changes/archive/2026-05-19-universal-icon-system/specs/.pi-map.index.md + +## role +Defines technical specifications for a universal icon system implementation using Phosphor icons with standardized sizing, registry management, and accessibility compliance. +## files +- spec.md | Specification document defining a universal icon system using Phosphor icons with a centralized registry, size variants, and accessibility requirements. | dep: @phosphor-icons/react +## arch +Specification-driven architecture with centralized icon registry pattern, token-based size variant system, and WCAG-aligned accessibility requirements documentation. +## tags +icons, spec, specification, document, defining, universal, icon, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md new file mode 100644 index 0000000..46590ff --- /dev/null +++ b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-19-workspace-visual-overhaul (index) +dir: openspec/changes/archive/2026-05-19-workspace-visual-overhaul + +## role +Archive of design specifications and project planning documents for a workspace visual overhaul initiative +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs + index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md new file mode 100644 index 0000000..6cfc82d --- /dev/null +++ b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-19-workspace-visual-overhaul +dir: openspec/changes/archive/2026-05-19-workspace-visual-overhaul + +index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md + +## role +Archive of design specifications and project planning documents for a workspace visual overhaul initiative +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for a workspace visual overhaul featuring a new project header, consolidated settings page with tabs, simplified sidebar, and updated routing structure. | dep: React/TypeScript component system, CSS variables/styling system, React Router, existing project API endpoints +- proposal.md | Proposes a UI/UX redesign of a repository workspace to follow GitHub-style layout conventions +- tasks.md | Project task list tracking a multi-phase UI overhaul for a workspace/settings interface with repository management, sidebar cleanup, and polish items +## arch +Documentation-driven specification pattern with structured design docs (design/proposal/tasks) using YAML metadata and phased task tracking for UI/UX redesign +## tags +design, workspace, .openspec, overhaul, project, settings, sidebar, repository +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md new file mode 100644 index 0000000..dea1a30 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs (index) +dir: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs + +## role +Defines the technical specification for a workspace UI visual overhaul focused on repository settings migration and sidebar simplification. +## parent +index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.md b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.md new file mode 100644 index 0000000..94fb4a5 --- /dev/null +++ b/openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs +dir: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs + +index: openspec/changes/archive/2026-05-19-workspace-visual-overhaul/specs/.pi-map.index.md + +## role +Defines the technical specification for a workspace UI visual overhaul focused on repository settings migration and sidebar simplification. +## files +- spec.md | Specification document for a workspace UI visual overhaul project, defining requirements, route changes, component interfaces, and API contracts for moving repository management into a settings page and simplifying the sidebar navigation. | dep: React, React Router, TypeScript, API client, toast notification system, form validation library, responsive design framework, accessibility tools +## arch +Markdown-based specification document using structured requirements sections, route mapping tables, component interface definitions, and API contract documentation without executable code. +## tags +spec, specification, document, workspace, visual, overhaul, project, defining +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md new file mode 100644 index 0000000..db3af58 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded (index) +dir: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded + +## role +Archive of a superseded 2026 proposal to migrate tool instance exposure from API proxy to Cloudflare Tunnel with unique HTTPS subdomains. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs + index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md new file mode 100644 index 0000000..dc25ac1 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded +dir: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded + +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md + +## role +Archive of a superseded 2026 proposal to migrate tool instance exposure from API proxy to Cloudflare Tunnel with unique HTTPS subdomains. +## files +- .openspec.yaml | Defines an OpenAPI specification configuration file with schema type and creation date metadata +- design.md | Architecture design document for replacing an API proxy with Cloudflare Tunnel to expose tool instances via unique HTTPS subdomains | dep: Cloudflare REST API, cloudflared, Docker, httpx, Cloudflare DNS +- proposal.md | Proposes replacing an API proxy endpoint with Cloudflare Tunnel integration to provide direct public URLs for tool instances | dep: FastAPI, Cloudflare API, cloudflared, Docker, Cloudflare Tunnel +- tasks.md | Project task list for migrating a proxy-based application access system to Cloudflare Tunnel-based public URLs | dep: docker-compose.traefik.yml, cloudflared, Cloudflare API, Alembic, FastAPI, React/TypeScript frontend +## arch +Document-driven design process capturing progressive refinement from proposal → design → tasks, with OpenAPI spec configuration for API contract definition. +## tags +design, proxy, cloudflare, tunnel, cloudflared, docker, .openspec, replacing +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md new file mode 100644 index 0000000..4a26716 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs (index) +dir: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs + +## role +Contains archived specification documents for a Cloudflare tunnel instances feature that was superseded on May 22, 2026. +## parent +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management + index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md new file mode 100644 index 0000000..2faf844 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs +dir: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs + +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md + +## role +Contains archived specification documents for a Cloudflare tunnel instances feature that was superseded on May 22, 2026. +## files +## arch +Time-based archival directory structure using ISO date prefixes for change tracking, with flat storage of spec files for historical reference of abandoned design proposals. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md new file mode 100644 index 0000000..3d5e858 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management (index) +dir: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management + +## role +Defines requirements for automated Cloudflare tunnel lifecycle management tied to tool instance start/stop/delete operations with owner-based access control +## parent +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.md b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.md new file mode 100644 index 0000000..5d24095 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management +dir: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management + +index: openspec/changes/archive/2026-05-22-cloudflare-tunnel-instances-superseded/specs/cloudflare-tunnel-management/.pi-map.index.md + +## role +Defines requirements for automated Cloudflare tunnel lifecycle management tied to tool instance start/stop/delete operations with owner-based access control +## files +- spec.md | Defines requirements for automated Cloudflare tunnel lifecycle management tied to tool instance start/stop/delete operations with owner-based access control | dep: Cloudflare API, DNS/CNAME records, database, container orchestration, frontend +## arch +Specification-driven requirements document using markdown-based specification format with functional requirements for cloud infrastructure integration and access control patterns +## tags +spec, defines, requirements, automated, cloudflare, tunnel, lifecycle, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md new file mode 100644 index 0000000..be2e78d --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config (index) +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config + +## role +Documents a planned breaking change to simplify tool type configuration from multiple interfaces to a single interface type with port requirements. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs + index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md new file mode 100644 index 0000000..0c771c3 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config + +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md + +## role +Documents a planned breaking change to simplify tool type configuration from multiple interfaces to a single interface type with port requirements. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for migrating tool types from a JSON interfaces array to a single interface_type string with requires_port boolean | dep: Alembic, Pydantic, SQLAlchemy, frontend API client, database +- proposal.md | Proposes a breaking change to simplify tool types from supporting multiple interfaces to a single interface type, with conditional port configuration based on interface type. +- tasks.md | Task checklist tracking database migration, backend/frontend API updates, UI changes, and verification steps for refactoring a tool types system from multiple interfaces to single interface_type with requires_port flag | dep: Alembic, SQLAlchemy, Pydantic, TypeScript, React, pytest, npm +## arch +Specification-driven change management using OpenSpec schema with design-proposal-task workflow pattern, tracking a database migration and full-stack API refactoring through structured documentation. +## tags +type, interface, design, tool, types, interfaces, single, port +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md new file mode 100644 index 0000000..8bdece8 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md @@ -0,0 +1,29 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs (index) +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs + +## role +Contains archived specification documents for enforcing single tool type with port configuration from a 2026-05-22 change. +## parent +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation + index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.md +- openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility + index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.md +- openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface + index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.md +- openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition + index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md new file mode 100644 index 0000000..05d46cc --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs + +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md + +## role +Contains archived specification documents for enforcing single tool type with port configuration from a 2026-05-22 change. +## files +## arch +Specification-driven design with dated archival structure for tracking API/schema evolution and configuration constraints. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md new file mode 100644 index 0000000..b97fb72 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation (index) +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation + +## role +Defines UI requirements for a tool workshop interface with dynamic field visibility based on selected tool type and port configuration. +## parent +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.md new file mode 100644 index 0000000..4bb8f6d --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation + +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/frontend-foundation/.pi-map.index.md + +## role +Defines UI requirements for a tool workshop interface with dynamic field visibility based on selected tool type and port configuration. +## files +- spec.md | Define requirements for a tool workshop UI with conditional field visibility based on interface type selection +## arch +Specification-driven requirements document using markdown-based OpenSpec format with conditional logic patterns for form field interdependencies. +## tags +spec, define, requirements, tool, workshop, conditional, field, visibility +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md new file mode 100644 index 0000000..3fee342 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility (index) +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility + +## role +Defines specification requirements for conditionally showing and validating port configuration fields based on whether a tool type requires network connectivity. +## parent +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.md new file mode 100644 index 0000000..a975e4f --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility + +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-port-visibility/.pi-map.index.md + +## role +Defines specification requirements for conditionally showing and validating port configuration fields based on whether a tool type requires network connectivity. +## files +- spec.md | Defines requirements for conditional port configuration visibility and validation based on a tool type's `requires_port` flag across UI and API. +## arch +Specification-driven requirements document using markdown-based behavioral specification pattern with UI/API cross-cutting concern definitions. +## tags +port, spec, defines, requirements, conditional, configuration, visibility, validation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md new file mode 100644 index 0000000..86d8696 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface (index) +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface + +## role +Defines specification requirements for migrating tool configurations from legacy multi-interface arrays to a single enforced tool type with port configuration validation. +## parent +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.md new file mode 100644 index 0000000..6dc1cc7 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface + +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-type-single-interface/.pi-map.index.md + +## role +Defines specification requirements for migrating tool configurations from legacy multi-interface arrays to a single enforced tool type with port configuration validation. +## files +- spec.md | Defines requirements for enforcing single interface type validation, migration from legacy interfaces array, and allowed value constraints for tool types +## arch +Specification-driven validation pattern using Markdown-based requirements documents with explicit constraint definitions, migration path documentation, and allowed value enumerations for configuration schemas. +## tags +spec, defines, requirements, enforcing, single, interface, type, validation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md new file mode 100644 index 0000000..24fa980 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition (index) +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition + +## role +Defines specification requirements for a ToolType domain model and its CRUD API with validation rules for single tool interfaces, port configurations, and template constraints. +## parent +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.md b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.md new file mode 100644 index 0000000..588a0b0 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition +dir: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition + +index: openspec/changes/archive/2026-05-22-enforce-single-tool-type-with-port-config/specs/tool-types-definition/.pi-map.index.md + +## role +Defines specification requirements for a ToolType domain model and its CRUD API with validation rules for single tool interfaces, port configurations, and template constraints. +## files +- spec.md | Specification document defining requirements for a ToolType model and CRUD API with single interface validation, port requirement logic, and template validation | dep: REST API, Docker Compose, YAML parsing, UUID, database timestamps +## arch +Specification-driven design using Markdown-based requirements documentation with domain modeling for type-safe tool configuration validation and port-aware resource constraints. +## tags +validation, spec, specification, document, defining, requirements, tooltype, model +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md b/openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md new file mode 100644 index 0000000..368cffb --- /dev/null +++ b/openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check (index) +dir: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check + +## role +Defines a feature specification for SSH-based Git repository cloning with structured owner/repo shorthand input and preflight validation. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.md b/openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.md new file mode 100644 index 0000000..13348f0 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check +dir: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check + +index: openspec/changes/archive/2026-05-22-git-repo-ssh-clone-check/.pi-map.index.md + +## role +Defines a feature specification for SSH-based Git repository cloning with structured owner/repo shorthand input and preflight validation. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document specifying a feature to clone repositories from a hardcoded Git provider using structured owner/repo inputs with preflight existence validation via SSH. | dep: git, existing repository creation endpoint (POST /projects/{project_id}/repositories), shared repository creation dialog +- proposal.md | Proposes a UI/UX enhancement to simplify Git repository creation by allowing owner/repo shorthand input instead of full URLs, with SSH-only clone validation via preflight checks. | dep: git, SSH, frontend dialog components, backend API endpoints, git ls-remote +- tasks.md | Project task tracking document for implementing SSH repository existence checks and structured clone form improvements | dep: git_repositories.py, RepositoryCreateDialog, git.commumedia.org +## arch +Specification-driven development using OpenSpec schema metadata, with design-proposal-task documentation hierarchy separating UX design from technical implementation planning. +## tags +git, ssh, design, clone, creation, .openspec, document, structured +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md b/openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md new file mode 100644 index 0000000..67338b0 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-22-git-repo-working-clones (index) +dir: openspec/changes/archive/2026-05-22-git-repo-working-clones + +## role +Design and planning documents for migrating Git repository infrastructure from bare/mirror clones to working-tree clones with proper branch initialization. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.md b/openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.md new file mode 100644 index 0000000..38be81b --- /dev/null +++ b/openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-22-git-repo-working-clones +dir: openspec/changes/archive/2026-05-22-git-repo-working-clones + +index: openspec/changes/archive/2026-05-22-git-repo-working-clones/.pi-map.index.md + +## role +Design and planning documents for migrating Git repository infrastructure from bare/mirror clones to working-tree clones with proper branch initialization. +## files +- design.md | Design document for migrating repository creation from bare/mirror repos to working-tree repos with proper branch initialization | dep: git, repository backend, workspace UI, file browser, commit editor, git toolbar +- proposal.md | Proposes changes to repository creation and git operations to use normal working clones instead of mirrored bare repositories +- tasks.md | A task tracking document for backend Git repository creation and synchronization improvements with test coverage and quality gates. +## arch +Documentation-driven change management using structured design proposals (design.md, proposal.md) with task tracking (tasks.md) for incremental backend Git operations refactoring. +## tags +design, repository, creation, git, document, bare, repos, working +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md new file mode 100644 index 0000000..945adb5 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring + +## role +Defines an archived specification for improving instance health monitoring in a container-based tunnel service by separating container and tunnel health concerns with readiness probes and smart recovery. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-instance-health-monitoring/specs + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md new file mode 100644 index 0000000..4aa0a1e --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md + +## role +Defines an archived specification for improving instance health monitoring in a container-based tunnel service by separating container and tunnel health concerns with readiness probes and smart recovery. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for improving instance health monitoring by distinguishing container health from tunnel health, integrating readiness probes, and preventing false-positive tunnel recreation | dep: Docker, Docker Compose, cloudflared, Docker API, Python, JSON, HTTP/REST API, WebSocket (mentioned as non-goal), database (tool_types table) +- proposal.md | Proposes architectural improvements to instance health monitoring, startup verification, and auto-recovery for a container-based tunnel service. | dep: Docker, docker compose, Docker API, React/Next.js (frontend), Python API backend +- tasks.md | Tracks completed backend and frontend tasks for implementing container startup verification, readiness probes, health checks, smart tunnel recovery, and status display UI | dep: Docker, docker compose, curl, ruff, mypy, tsc, FastAPI/Flask (implied by api/tool_instances.py), React/Vue (implied by frontend components) +## arch +Specification-driven architecture using OpenSpec metadata with design/proposal/task documents following a structured change-management pattern for incremental feature delivery. +## tags +health, tunnel, design, container, docker, docker compose, tasks, .openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md new file mode 100644 index 0000000..12667e1 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md @@ -0,0 +1,32 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs + +## role +Contains archived specification documents for instance health monitoring features from a 2026-05-22 change cycle. +## parent +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.md +- openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.md +- openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.md +- openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.md +- openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances + index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md new file mode 100644 index 0000000..8e25167 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md + +## role +Contains archived specification documents for instance health monitoring features from a 2026-05-22 change cycle. +## files +## arch +Flat directory structure storing dated, versioned specification archives with no active code or architectural patterns. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md new file mode 100644 index 0000000..e9b88ad --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health + +## role +Defines the specification for instance runtime health monitoring in a container/instance management system +## parent +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.md new file mode 100644 index 0000000..2111949 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-runtime-health/.pi-map.index.md + +## role +Defines the specification for instance runtime health monitoring in a container/instance management system +## files +- spec.md | Specification document defining health monitoring, polling, and container state synchronization requirements for a container/instance management system | dep: Docker, HTTP tunneling, REST API +## arch +Specification-driven design with requirements for polling-based health checks, state synchronization, and container lifecycle management +## tags +container, spec, specification, document, defining, health, monitoring, polling +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md new file mode 100644 index 0000000..229d50f --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health + +## role +Defines requirements for container startup verification, readiness probe execution, and health monitoring for a tool instance management system using Docker Compose +## parent +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.md new file mode 100644 index 0000000..98af100 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/instance-startup-health/.pi-map.index.md + +## role +Defines requirements for container startup verification, readiness probe execution, and health monitoring for a tool instance management system using Docker Compose +## files +- spec.md | Defines requirements for container startup verification, readiness probe execution, and health monitoring for a tool instance management system using Docker Compose | dep: docker compose, docker ps, readiness probes, tunnels, health endpoints, database +## arch +Specification-driven architecture using markdown-based requirements documentation with Docker Compose integration patterns for health monitoring and startup lifecycle management +## tags +spec, defines, requirements, container, startup, verification, readiness, probe +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md new file mode 100644 index 0000000..97724da --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration + +## role +Defines the specification for integrating Kubernetes-style readiness probes into instance startup health monitoring to determine when containers are ready to receive traffic. +## parent +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.md new file mode 100644 index 0000000..06b05c9 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/readiness-probe-integration/.pi-map.index.md + +## role +Defines the specification for integrating Kubernetes-style readiness probes into instance startup health monitoring to determine when containers are ready to receive traffic. +## files +- spec.md | Defines requirements for container readiness probe configuration, execution, and result storage during instance startup | dep: docker, container orchestration, health endpoint, logging system +## arch +Specification-driven requirements document using markdown-based technical specification pattern with structured sections for goals, requirements, and implementation details. +## tags +spec, defines, requirements, container, readiness, probe, configuration, execution +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md new file mode 100644 index 0000000..1bc86e1 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery + +## role +Defines health monitoring requirements for distinguishing infrastructure tunnel failures from application-level errors to enable appropriate recovery actions and UI feedback. +## parent +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.md new file mode 100644 index 0000000..1c0147e --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/smart-tunnel-recovery/.pi-map.index.md + +## role +Defines health monitoring requirements for distinguishing infrastructure tunnel failures from application-level errors to enable appropriate recovery actions and UI feedback. +## files +- spec.md | Specifies requirements for classifying tunnel failures versus application errors in a health check system with different UI behaviors and recovery actions. +## arch +Specification-driven requirements document using scenario-based classification pattern with decision matrix mapping failure types to distinct UI behaviors and automated recovery procedures. +## tags +spec, specifies, requirements, classifying, tunnel, failures, versus, application +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..6e469db --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances (index) +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances + +## role +Defines system requirements for container health monitoring and tunnel management functionality. +## parent +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..6f5f9d7 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances +dir: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances + +index: openspec/changes/archive/2026-05-22-instance-health-monitoring/specs/tool-instances/.pi-map.index.md + +## role +Defines system requirements for container health monitoring and tunnel management functionality. +## files +- spec.md | Defines modified and added system requirements for container status monitoring, health check endpoints, and smart tunnel recreation logic. +## arch +Specification-driven requirements documentation using markdown-based system specification format with functional requirement decomposition. +## tags +spec, defines, modified, added, system, requirements, container, status +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md new file mode 100644 index 0000000..9775ad0 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-instance-proxy (index) +dir: openspec/changes/archive/2026-05-22-instance-proxy + +## role +Defines an archived OpenAPI specification and design documents for a FastAPI-based HTTP/WebSocket proxy to expose internal Docker tool instances through authenticated external endpoints. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-instance-proxy/specs + index: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md new file mode 100644 index 0000000..d228c10 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-instance-proxy +dir: openspec/changes/archive/2026-05-22-instance-proxy + +index: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md + +## role +Defines an archived OpenAPI specification and design documents for a FastAPI-based HTTP/WebSocket proxy to expose internal Docker tool instances through authenticated external endpoints. +## files +- .openspec.yaml | Defines an OpenAPI specification configuration file with schema type and creation date metadata +- design.md | Design document for implementing a FastAPI-based HTTP/WebSocket proxy to allow users to access internal Docker tool instances through a single authenticated API endpoint. | dep: FastAPI, httpx, starlette.websockets, Docker +- proposal.md | Proposes adding an HTTP/WebSocket proxy endpoint to expose Docker containerized tool instances to users over HTTPS instead of broken localhost links | dep: docker, backend API, frontend, WebSocket, HTTPS +- tasks.md | Project task tracking checklist for implementing a proxy endpoint system that routes HTTP/WebSocket traffic to Docker container instances | dep: Docker, FastAPI/httpx, WebSocket, code-server, ruff, mypy +## arch +Specification-driven API design using OpenAPI/OpenSpec configuration, FastAPI async proxy architecture with HTTP/WebSocket dual-protocol routing, Docker container instance targeting, and task-tracked iterative implementation. +## tags +docker, websocket, design, fastapi, http, proxy, instances, endpoint +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md new file mode 100644 index 0000000..b766a5c --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-22-instance-proxy/specs (index) +dir: openspec/changes/archive/2026-05-22-instance-proxy/specs + +## role +Contains archived OpenAPI specification files for an instance proxy feature from a specific dated change set. +## parent +index: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-proxy/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy + index: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md new file mode 100644 index 0000000..9f3cf2c --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-instance-proxy/specs +dir: openspec/changes/archive/2026-05-22-instance-proxy/specs + +index: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md + +## role +Contains archived OpenAPI specification files for an instance proxy feature from a specific dated change set. +## files +## arch +Flat directory structure storing versioned JSON specification files as immutable snapshots of API definitions. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md b/openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md new file mode 100644 index 0000000..7c080e3 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy (index) +dir: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy + +## role +Defines API specifications for an HTTP/WebSocket proxy endpoint that enables authenticated request forwarding to running tool instances with owner-based access control. +## parent +index: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-proxy/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.md b/openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.md new file mode 100644 index 0000000..d410338 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy +dir: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy + +index: openspec/changes/archive/2026-05-22-instance-proxy/specs/instance-proxy/.pi-map.index.md + +## role +Defines API specifications for an HTTP/WebSocket proxy endpoint that enables authenticated request forwarding to running tool instances with owner-based access control. +## files +- spec.md | Specifies API requirements for an HTTP/WebSocket proxy endpoint that forwards requests to running tool instances with owner-based access control +## arch +API specification document using Markdown-based specification format with endpoint definitions, authentication requirements, and access control rules. +## tags +spec, specifies, api, requirements, http, websocket, proxy, endpoint +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md new file mode 100644 index 0000000..fc3cda2 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal (index) +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal + +## role +Defines a feature specification for adding web terminal access to OpenCode through standardized port configuration and tunneling infrastructure. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-opencode-web-terminal/specs + index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md new file mode 100644 index 0000000..bd7854d --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal + +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md + +## role +Defines a feature specification for adding web terminal access to OpenCode through standardized port configuration and tunneling infrastructure. +## files +- .openspec.yaml | Defines an OpenAPI specification configuration file with schema type and creation date metadata +- design.md | Design document for making OpenCode accessible via web terminal, standardizing port configuration across tool types, and adding validation for tool type ports and interfaces. +- proposal.md | Proposes a systematic tool port configuration system with web interface support for terminal-first tools like OpenCode +- tasks.md | Project task list tracking implementation of tool type port configuration, OpenCode web server integration, tunnel port fixes, frontend updates, database migrations, and testing for a development tools platform | dep: Alembic, Docker Compose, OpenCode, backend API, frontend UI, tunnel service +## arch +Specification-driven design using OpenAPI config metadata, structured documentation (design/proposal/tasks), and systematic port/interface validation for terminal-first development tools. +## tags +configuration, opencode, port, tool, type, design, web, .openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md new file mode 100644 index 0000000..5a96152 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs (index) +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs + +## role +Contains archived specification documents for a web terminal feature implementation dated May 22, 2026, serving as historical reference for the opencode project's web terminal design decisions. +## parent +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server + index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.md +- openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration + index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.md +- openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types + index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md new file mode 100644 index 0000000..4c10c9c --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs + +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md + +## role +Contains archived specification documents for a web terminal feature implementation dated May 22, 2026, serving as historical reference for the opencode project's web terminal design decisions. +## files +## arch +Document-based specification storage using date-versioned directory hierarchy with no active code architecture, following a simple archival pattern for tracking feature specifications over time. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md new file mode 100644 index 0000000..c06d693 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server (index) +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server + +## role +Defines container specifications for a web server with integrated terminal interface in the OpenCode development environment. +## parent +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.md new file mode 100644 index 0000000..d3b1340 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server + +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/opencode-web-server/.pi-map.index.md + +## role +Defines container specifications for a web server with integrated terminal interface in the OpenCode development environment. +## files +- spec.md | Specifies requirements for OpenCode containers to run a web server on port 3000 with a web terminal interface, proper tunneling, and UI integration. +## arch +Specification-driven architecture using markdown-based requirements documents to define container behavior, port binding, and UI integration patterns. +## tags +web, spec, specifies, requirements, opencode, containers, run, server +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md new file mode 100644 index 0000000..d51100e --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration (index) +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration + +## role +Defines specification requirements for validating tool types, managing default network ports, exposing ports in Docker Compose templates, and supporting multiple network interfaces in the OpenCode web terminal environment. +## parent +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.md new file mode 100644 index 0000000..068ecff --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration + +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-port-configuration/.pi-map.index.md + +## role +Defines specification requirements for validating tool types, managing default network ports, exposing ports in Docker Compose templates, and supporting multiple network interfaces in the OpenCode web terminal environment. +## files +- spec.md | Defines requirements for tool type validation including default ports, compose template port exposure, and multiple interface support +## arch +Specification-driven requirements document using markdown-based technical specification pattern with structured sections covering validation rules, port configuration defaults, container orchestration integration, and multi-interface networking requirements. +## tags +spec, defines, requirements, tool, type, validation, including, default +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md new file mode 100644 index 0000000..373ac02 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types (index) +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types + +## role +Defines specifications for a tool type management system that validates Docker Compose templates and manages built-in tool definitions +## parent +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.md b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.md new file mode 100644 index 0000000..b92beae --- /dev/null +++ b/openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types +dir: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types + +index: openspec/changes/archive/2026-05-22-opencode-web-terminal/specs/tool-types/.pi-map.index.md + +## role +Defines specifications for a tool type management system that validates Docker Compose templates and manages built-in tool definitions +## files +- spec.md | Specifies requirements for a tool type management system with Docker Compose template validation and built-in tool definitions | dep: database, docker-compose, validation framework +## arch +Specification-driven architecture using Markdown-based requirements documentation with Docker Compose template validation patterns +## tags +tool, docker, compose, spec, specifies, requirements, type, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md new file mode 100644 index 0000000..ec93e51 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh (index) +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh + +## role +Archive directory preserving the historical specification and design documents for a completed feature that added SSH-based repository clone mode as an alternative to mount mode for isolated tool instances. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs + index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md new file mode 100644 index 0000000..b8db087 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh + +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md + +## role +Archive directory preserving the historical specification and design documents for a completed feature that added SSH-based repository clone mode as an alternative to mount mode for isolated tool instances. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document specifying a system to support both mount and clone repository access modes for tool instances, with SSH key management for clone operations. | dep: GitRepository, ToolInstance, Alembic, compose templates, SSH key system, _modify_compose_file +- proposal.md | Proposes a feature to add repository clone mode with SSH key support for isolated tool instances, enabling clean-room development and git operations inside containers without affecting the host working copy. | dep: GitRepository, ToolInstance, Docker, SSH keys, database migrations, backend API, frontend UI +- tasks.md | A completed task checklist for implementing SSH key-based git clone functionality with mount/clone modes across database, backend, frontend, and DevOps infrastructure | dep: Alembic, Pydantic, SQLAlchemy, FastAPI, React/TypeScript, pytest, ruff, mypy, npm, git, subprocess, SSH +## arch +Specification-driven feature development using OpenSpec schema metadata, with design documents following a progression from proposal → design → tasks, covering full-stack implementation across database schema changes, backend API modifications, frontend UI updates, and DevOps infrastructure changes for SSH key lifecycle management. +## tags +clone, ssh, design, key, git, .openspec, support, mount +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md new file mode 100644 index 0000000..55be018 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs (index) +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs + +## role +Contains historical specification documents from May 22, 2026 for a repository clone mode feature using SSH protocol. +## parent +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo + index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.md +- openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode + index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.md +- openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances + index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md new file mode 100644 index 0000000..13ddbe1 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs + +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md + +## role +Contains historical specification documents from May 22, 2026 for a repository clone mode feature using SSH protocol. +## files +## arch +Specification-driven design with dated archival structure for tracking feature evolution over time. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md new file mode 100644 index 0000000..1ffca10 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo (index) +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo + +## role +Defines SSH key authentication requirements for secure Git repository cloning and container-based git operations. +## parent +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.md new file mode 100644 index 0000000..a51f386 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo + +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/git-repo/.pi-map.index.md + +## role +Defines SSH key authentication requirements for secure Git repository cloning and container-based git operations. +## files +- spec.md | Defines requirements for associating SSH keys with Git repositories for clone operations and container git access +## arch +Specification-driven requirements document using markdown-based technical specification pattern with user stories and acceptance criteria. +## tags +git, spec, defines, requirements, associating, ssh, keys, repositories +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md new file mode 100644 index 0000000..1185ed4 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode (index) +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode + +## role +Defines host-side repository cloning requirements including branch selection, SSH key container preparation, and dirty state detection for a 2026-05-22 spec archive. +## parent +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.md new file mode 100644 index 0000000..63c2e48 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode + +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/repo-clone-mode/.pi-map.index.md + +## role +Defines host-side repository cloning requirements including branch selection, SSH key container preparation, and dirty state detection for a 2026-05-22 spec archive. +## files +- spec.md | Defines requirements for host-side repository cloning with branch selection, SSH key preparation for containers, and repository dirty state detection | dep: git, ssh, filesystem +## arch +Specification document using requirement-based markdown with functional areas (cloning, SSH keys, state detection) for a repo-clone-mode feature. +## tags +repository, ssh, spec, defines, requirements, host, side, cloning +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..e7302c6 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances (index) +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances + +## role +Defines requirements for a tool instance management system that handles repository clone/mount modes, SSH key mounting, and safe deletion with dirty-state checks. +## parent +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.md b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..5e44dd8 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances +dir: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances + +index: openspec/changes/archive/2026-05-22-repo-clone-mode-with-ssh/specs/tool-instances/.pi-map.index.md + +## role +Defines requirements for a tool instance management system that handles repository clone/mount modes, SSH key mounting, and safe deletion with dirty-state checks. +## files +- spec.md | Specifies requirements for a tool instance management system supporting clone/mount modes, SSH key mounting, and dirty-state checks before deletion. | dep: git, docker-compose, SSH, container runtime +## arch +Specification-driven architecture using Markdown-based requirements documents with structured sections for overview, configuration, and behavioral rules. +## tags +ssh, spec, specifies, requirements, tool, instance, management, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md b/openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md new file mode 100644 index 0000000..52fef73 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes (index) +dir: openspec/changes/archive/2026-05-22-session-management-fixes + +## role +Archive directory preserving historical design documents and task tracking for a session management system improvement initiative that used temporary Cloudflare tunnels. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-session-management-fixes/specs + index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md b/openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md new file mode 100644 index 0000000..b3158fb --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes +dir: openspec/changes/archive/2026-05-22-session-management-fixes + +index: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md + +## role +Archive directory preserving historical design documents and task tracking for a session management system improvement initiative that used temporary Cloudflare tunnels. +## files +- .openspec.yaml | Defines an OpenAPI specification configuration file with schema type and creation date metadata +- design.md | Design document for UX and reliability improvements to a session management system using temporary Cloudflare tunnels | dep: React, Cloudflare (cloudflared), HTTP/polling, backend API, database +- proposal.md | Proposes UX and reliability improvements for session management UI including confirmation dialogs, state fixes, tunnel health monitoring, and tunnel recreation capabilities | dep: React, Cloudflare tunnels, Docker, tool_instances API, sessions API +- tasks.md | Project task tracking document listing completed backend and frontend development tasks for tunnel management features in a Docker-based application | dep: docker.py, tool_instances.py, sessions.ts, ToolInstance model, SessionsPage, InstanceList +## arch +Specification-driven development with OpenAPI configuration, phased proposal-to-implementation workflow (design → proposal → tasks), and feature-flagged tunnel management in containerized infrastructure. +## tags +design, management, tunnel, docker, tasks, .openspec, document, reliability +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md new file mode 100644 index 0000000..a3a0617 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs (index) +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs + +## role +Contains archived specification documents for session management fixes from a May 2026 release, serving as historical documentation for past API design decisions. +## parent +index: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux + index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.md +- openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances + index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.md +- openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring + index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md new file mode 100644 index 0000000..629dae3 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs + +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md + +## role +Contains archived specification documents for session management fixes from a May 2026 release, serving as historical documentation for past API design decisions. +## files +## arch +Flat directory structure storing dated specification snapshots with no active code or architectural patterns—purely document archival using filesystem-based versioning. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md new file mode 100644 index 0000000..025b957 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux (index) +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux + +## role +Defines UX requirements for session lifecycle management including stop confirmations and deletion feedback +## parent +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.md new file mode 100644 index 0000000..a38b26b --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux + +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/session-lifecycle-ux/.pi-map.index.md + +## role +Defines UX requirements for session lifecycle management including stop confirmations and deletion feedback +## files +- spec.md | Defines software requirements for session management UI behaviors including stop confirmation dialogs and immediate deletion updates +## arch +Specification-driven requirements document using markdown-based software specification pattern with behavioral scenario definitions +## tags +spec, defines, software, requirements, session, management, behaviors, including +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..5849471 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances (index) +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances + +## role +Specifies requirements for a tool lifecycle management system handling Docker Compose deployment, Cloudflare tunneling, and health monitoring. +## parent +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..2461d69 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances + +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tool-instances/.pi-map.index.md + +## role +Specifies requirements for a tool lifecycle management system handling Docker Compose deployment, Cloudflare tunneling, and health monitoring. +## files +- spec.md | Defines modified and added requirements for a tool lifecycle management system with Docker Compose, Cloudflare tunneling, and health monitoring capabilities. | dep: Docker Compose, cloudflared, Cloudflare tunnel API, HTTP health check client +## arch +Specification-driven architecture using markdown-based requirements documents with sections for modified requirements, added requirements, and detailed capability definitions for container orchestration, networking, and observability. +## tags +spec, defines, modified, added, requirements, tool, lifecycle, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md new file mode 100644 index 0000000..6708c48 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring (index) +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring + +## role +Defines specifications for automated health monitoring and recovery of cloudflared tunnels attached to running instances. +## parent +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.md b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.md new file mode 100644 index 0000000..9fd33ed --- /dev/null +++ b/openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring +dir: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring + +index: openspec/changes/archive/2026-05-22-session-management-fixes/specs/tunnel-health-monitoring/.pi-map.index.md + +## role +Defines specifications for automated health monitoring and recovery of cloudflared tunnels attached to running instances. +## files +- spec.md | Defines requirements for monitoring and recreating cloudflared tunnels for running instances | dep: cloudflared, HTTP health checks, UI components +## arch +Requirements specification document using markdown-based technical specification pattern with functional requirements for tunnel state detection, failure handling, and tunnel recreation workflows. +## tags +cloudflared, spec, defines, requirements, monitoring, recreating, tunnels, running +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md b/openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md new file mode 100644 index 0000000..0ee231e --- /dev/null +++ b/openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-sessions-hub/.openspec (index) +dir: openspec/changes/archive/2026-05-22-sessions-hub/.openspec + +## role +Defines the configuration schema for a sessions hub service using a specification-driven approach. +## parent +index: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md +## children +- +## files +- config.yaml +## links +index: openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.md b/openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.md new file mode 100644 index 0000000..7bae153 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-sessions-hub/.openspec +dir: openspec/changes/archive/2026-05-22-sessions-hub/.openspec + +index: openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md + +## role +Defines the configuration schema for a sessions hub service using a specification-driven approach. +## files +- config.yaml | Defines a configuration file for a sessions hub service using spec-driven schema +## arch +Declarative configuration pattern using YAML-based schema definitions with spec-driven design for service configuration management. +## tags +config, defines, configuration, sessions, hub, service, spec, driven +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md b/openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md new file mode 100644 index 0000000..2aa66bf --- /dev/null +++ b/openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/archive/2026-05-22-sessions-hub (index) +dir: openspec/changes/archive/2026-05-22-sessions-hub + +## role +Design and planning package for a centralized Sessions Hub feature that manages user workspace sessions across projects. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-sessions-hub/.openspec + index: openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-sessions-hub/.openspec/.pi-map.md +- openspec/changes/archive/2026-05-22-sessions-hub/specs + index: openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md b/openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md new file mode 100644 index 0000000..4f8e2c7 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-22-sessions-hub +dir: openspec/changes/archive/2026-05-22-sessions-hub + +index: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md + +## role +Design and planning package for a centralized Sessions Hub feature that manages user workspace sessions across projects. +## files +- design.md | Design document for implementing a Sessions Hub feature with page layout, navigation, data flow, and API changes for managing user workspace sessions. | dep: Navigation, AppShell, SessionsPage, UserConfig, API endpoints (/users/me/sessions, /users/me/config), workspace, state management, polling +- proposal.md | Proposes a centralized "Sessions Hub" feature for managing active tool instances across projects +- tasks.md | Project task tracking document for implementing a Sessions Hub feature across backend and frontend | dep: UserConfig model, Alembic, Pydantic, AppShell, React Router, sessions context, workspace, npm +## arch +Specification-driven architecture using markdown-based design documents (design.md, proposal.md, tasks.md) to define requirements, API contracts, and implementation tasks before code development. +## tags +sessions, design, hub, feature, workspace, document, implementing, navigation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md new file mode 100644 index 0000000..1e8acbe --- /dev/null +++ b/openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-sessions-hub/specs (index) +dir: openspec/changes/archive/2026-05-22-sessions-hub/specs + +## role +Defines technical specifications for a Sessions Hub feature that manages user sessions in a web application. +## parent +index: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-sessions-hub/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.md new file mode 100644 index 0000000..29ab5a2 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-sessions-hub/specs +dir: openspec/changes/archive/2026-05-22-sessions-hub/specs + +index: openspec/changes/archive/2026-05-22-sessions-hub/specs/.pi-map.index.md + +## role +Defines technical specifications for a Sessions Hub feature that manages user sessions in a web application. +## files +- spec.md | Defines technical specifications for a "Sessions Hub" feature including requirements, API endpoints, UI layouts, state management, and quality gates for managing user sessions in a web application. | dep: REST API, TypeScript, React/frontend framework (implied by UI specs and quality gates), polling-based state management, Pydantic/BaseModel +## arch +Specification-driven design with structured requirements, API contracts, UI wireframes, state management patterns, and defined quality gates for implementation validation. +## tags +sessions, spec, defines, technical, specifications, hub, feature, including +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md new file mode 100644 index 0000000..36346ae --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-tool-config-management (index) +dir: openspec/changes/archive/2026-05-22-tool-config-management + +## role +This package contains archived design documents and specifications for implementing a tool configuration management system with user-global and project-scoped environment variables and file-based configs for containerized development tools. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-tool-config-management/specs + index: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md new file mode 100644 index 0000000..986eab9 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-tool-config-management +dir: openspec/changes/archive/2026-05-22-tool-config-management + +index: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md + +## role +This package contains archived design documents and specifications for implementing a tool configuration management system with user-global and project-scoped environment variables and file-based configs for containerized development tools. +## files +- .openspec.yaml | Defines an OpenAPI specification configuration file with schema type and creation date metadata +- design.md | Design document for implementing a flexible tool configuration system with user-global and project-scoped env vars and file-based configs for containerized tools +- proposal.md | Proposes a feature to add per-user/per-project tool configuration management with categorization and container mounting for a development tools platform. | dep: database, container-runtime, API, frontend +- tasks.md | Project task checklist tracking implementation of tool configuration system with database models, backend APIs, frontend UI, and OpenCode integration +## arch +Specification-driven design using OpenAPI configuration, structured design/proposal/task documentation pattern, and feature planning for a multi-tier configuration system (user-global, project-scoped, categorized) with container integration. +## tags +configuration, design, tool, project, .openspec, system, user, tools +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md new file mode 100644 index 0000000..48870d1 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-22-tool-config-management/specs (index) +dir: openspec/changes/archive/2026-05-22-tool-config-management/specs + +## role +Contains archived specification documents from May 22, 2026 for a tool configuration management feature, serving as historical design records for the OpenSpec project. +## parent +index: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-management/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management + index: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md new file mode 100644 index 0000000..9fe5935 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-tool-config-management/specs +dir: openspec/changes/archive/2026-05-22-tool-config-management/specs + +index: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md + +## role +Contains archived specification documents from May 22, 2026 for a tool configuration management feature, serving as historical design records for the OpenSpec project. +## files +## arch +Specification-driven architecture using dated archival organization (YYYY-MM-DD-feature-name format) with document-based design governance and version-controlled feature specifications. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md new file mode 100644 index 0000000..4ee136b --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management (index) +dir: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management + +## role +Defines the specification for a user-scoped tool configuration management system supporting environment and file-based configs with tool categorization and built-in OpenCode tool integration. +## parent +index: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-management/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.md new file mode 100644 index 0000000..92795de --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management +dir: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management + +index: openspec/changes/archive/2026-05-22-tool-config-management/specs/tool-config-management/.pi-map.index.md + +## role +Defines the specification for a user-scoped tool configuration management system supporting environment and file-based configs with tool categorization and built-in OpenCode tool integration. +## files +- spec.md | Defines system requirements for user-scoped tool configurations, environment/file config types, tool categorization with interfaces, and built-in OpenCode tool support +## arch +Specification-driven design using requirements documentation with hierarchical tool categorization (interfaces, built-in, custom), dual configuration storage types (environment variables and file-based), and user-scoped resource isolation. +## tags +tool, spec, defines, system, requirements, user, scoped, configurations +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md new file mode 100644 index 0000000..b872599 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-22-tool-config-ui-rework (index) +dir: openspec/changes/archive/2026-05-22-tool-config-ui-rework + +## role +Archive directory preserving historical design documents for a tool configuration UI rework feature from May 2026. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs + index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md new file mode 100644 index 0000000..6ea571a --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-tool-config-ui-rework +dir: openspec/changes/archive/2026-05-22-tool-config-ui-rework + +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md + +## role +Archive directory preserving historical design documents for a tool configuration UI rework feature from May 2026. +## files +- .openspec.yaml | Defines an OpenAPI specification configuration file with schema type and creation date metadata +- design.md | Design document for redesigning a tool configuration page with split-pane layout, new configuration fields, and improved UX | dep: PostgreSQL, JSON, Docker/container runtime (referenced but not modified) +- proposal.md | Proposes a UI/UX redesign of a tool configuration management page with backend schema changes to support additional configuration fields | dep: database, API endpoints, frontend components, migration system +- tasks.md | Project task checklist tracking implementation of container runtime configuration features across database, backend, and frontend | dep: Alembic, SQLAlchemy, Pydantic, FastAPI, React/TypeScript, JSON editor component, ruff, mypy, tsc, eslint +## arch +Document-driven specification pattern with phased design-to-implementation workflow (proposal → design → tasks → OpenAPI spec), using markdown-based design documents and YAML schema configuration for cross-stack feature coordination. +## tags +configuration, design, schema, .openspec, tool, page, fields, backend +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md new file mode 100644 index 0000000..27fe4cf --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs (index) +dir: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs + +## role +Contains archived specification documents for a UI rework of tool configuration features dated May 22, 2026. +## parent +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management + index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md new file mode 100644 index 0000000..da5c664 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs +dir: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs + +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md + +## role +Contains archived specification documents for a UI rework of tool configuration features dated May 22, 2026. +## files +## arch +Specification archive using date-based versioning with descriptive naming convention for tracking design changes over time. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md new file mode 100644 index 0000000..1ef4ae0 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management (index) +dir: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management + +## role +Defines specifications for a tool configuration management system featuring runtime fields, split-pane UI, JSON editors, and validation +## parent +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.md new file mode 100644 index 0000000..0603f40 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management +dir: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management + +index: openspec/changes/archive/2026-05-22-tool-config-ui-rework/specs/tool-config-management/.pi-map.index.md + +## role +Defines specifications for a tool configuration management system featuring runtime fields, split-pane UI, JSON editors, and validation +## files +- spec.md | Defines requirements for a tool configuration system with runtime fields, split-pane UI, JSON editors, and validation +## arch +Specification-driven design with requirements documentation for a split-pane editor interface supporting JSON configuration with runtime field validation +## tags +spec, defines, requirements, tool, configuration, system, runtime, fields +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md new file mode 100644 index 0000000..59374fb --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/changes/archive/2026-05-22-tool-workshop (index) +dir: openspec/changes/archive/2026-05-22-tool-workshop + +## role +Design and planning documents for a Docker-based tool management extension enabling user-defined tools with rich configuration, readiness probes, and reusable config collections. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-22-tool-workshop/specs + index: openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.md +## files +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md new file mode 100644 index 0000000..d0863c6 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-22-tool-workshop +dir: openspec/changes/archive/2026-05-22-tool-workshop + +index: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md + +## role +Design and planning documents for a Docker-based tool management extension enabling user-defined tools with rich configuration, readiness probes, and reusable config collections. +## files +- design.md | Design specification for a "Tool Workshop" system that extends an existing tool management platform to support Docker Compose and Dockerfile definitions, readiness probes, reusable config file collections, rich configuration fields, and a unified management UI. | dep: Docker Compose, Docker, Python, JSONB, Cloudflare tunnels, database (implied), web framework (implied) +- proposal.md | Proposes a comprehensive redesign of a tool system to support user-defined Docker tools, rich configuration, reusable config folders, and readiness probes through a unified "Tool Workshop" interface. | dep: Docker Compose, Dockerfiles, database migration system, frontend routing/navigation system, Docker build service +- tasks.md | A comprehensive project task list tracking the implementation of a Docker-based tool management platform with backend API, frontend UI, and deployment phases, all marked as complete. | dep: Alembic, Pydantic, Docker, React/TypeScript, FastAPI, SQLAlchemy +## arch +Specification-driven architecture with phased backend/frontend/deployment implementation, featuring Docker Compose/Dockerfile tool definitions, config folder reusability, and a unified "Tool Workshop" management interface. +## tags +tool, docker, design, management, workshop, system, platform, support +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md new file mode 100644 index 0000000..8afe817 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-22-tool-workshop/specs (index) +dir: openspec/changes/archive/2026-05-22-tool-workshop/specs + +## role +Defines core specifications for a unified Docker-based development tool management system with configuration mounting and health checking capabilities. +## parent +index: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-workshop/.pi-map.md +## children +- +## files +- config-folders.md +- readiness-probes.md +- tool-workshop.md +## links +index: openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.md b/openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.md new file mode 100644 index 0000000..507cde1 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.md @@ -0,0 +1,21 @@ +# openspec/changes/archive/2026-05-22-tool-workshop/specs +dir: openspec/changes/archive/2026-05-22-tool-workshop/specs + +index: openspec/changes/archive/2026-05-22-tool-workshop/specs/.pi-map.index.md + +## role +Defines core specifications for a unified Docker-based development tool management system with configuration mounting and health checking capabilities. +## files +- config-folders.md | Defines requirements and design for a reusable config folder system that mounts user configuration files into tool instances with project-specific override support +- readiness-probes.md | Defines functional requirements and specifications for container readiness probes that determine when tool instances are fully initialized and marked as running. | dep: docker, pydantic/BaseModel, shell commands (curl, nc, pg_isready), JSON +- tool-workshop.md | Defines requirements and specifications for a unified tool management system that handles Docker-based development tools through type definitions, configurations, config folders, and readiness probes. | dep: Docker Compose, Dockerfile, container runtime, design.md +## arch +Specification-driven layered architecture with modular subsystems (config folders, readiness probes) composed into a unified tool workshop framework, using type definitions and project-specific overrides for extensibility. +## tags +tool, config, readiness, probes, defines, requirements, folders, design +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md b/openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md new file mode 100644 index 0000000..aaf9a25 --- /dev/null +++ b/openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-ui-redesign-home-settings (index) +dir: openspec/changes/archive/2026-05-22-ui-redesign-home-settings + +## role +Preserves historical design documents and planning artifacts for a May 2026 UI redesign focused on consolidating navigation around a Home overview and tabbed Settings hub. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md +map: openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.md b/openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.md new file mode 100644 index 0000000..20283dd --- /dev/null +++ b/openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-22-ui-redesign-home-settings +dir: openspec/changes/archive/2026-05-22-ui-redesign-home-settings + +index: openspec/changes/archive/2026-05-22-ui-redesign-home-settings/.pi-map.index.md + +## role +Preserves historical design documents and planning artifacts for a May 2026 UI redesign focused on consolidating navigation around a Home overview and tabbed Settings hub. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design specification document for a UI redesign covering information architecture, page layouts, visual direction, routing, and component strategy. +- proposal.md | Proposes a UI redesign to consolidate the authenticated frontend around a Home overview and a tabbed Settings hub while keeping existing functionality and APIs unchanged. +- tasks.md | Task checklist tracking completed work for a UI redesign project involving navigation restructuring, home page redesign, and settings hub reorganization +## arch +Simple archival directory structure using date-prefixed naming convention with standard markdown documentation (design spec, proposal, task tracking) and YAML metadata for change record identification. +## tags +redesign, design, .openspec, page, home, settings, hub, proposal +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md b/openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md new file mode 100644 index 0000000..ef877d9 --- /dev/null +++ b/openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-23-remove-built-in-tools (index) +dir: openspec/changes/archive/2026-05-23-remove-built-in-tools + +## role +Contains planning and design documents for a refactoring initiative to remove the special-cased "built-in" tool type classification and migrate to a unified database-driven tool type system. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-23-remove-built-in-tools/specs + index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md +map: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md b/openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md new file mode 100644 index 0000000..8d2d636 --- /dev/null +++ b/openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-23-remove-built-in-tools +dir: openspec/changes/archive/2026-05-23-remove-built-in-tools + +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md + +## role +Contains planning and design documents for a refactoring initiative to remove the special-cased "built-in" tool type classification and migrate to a unified database-driven tool type system. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for removing built-in tool type special handling by migrating seeded data to regular database records via Alembic migration | dep: Alembic, SQLAlchemy/model layer, main.py startup logic, API layer, frontend +- proposal.md | Proposes a refactoring to eliminate the privileged "built-in" tool type classification and make all tool types equal, first-class database records | dep: ToolType model, main.py, tool_types.py API, database migration system, frontend +- tasks.md | Task checklist tracking the removal of `is_builtin` functionality from tool types across a full-stack application (database, backend, frontend, and testing) | dep: Alembic, SQLAlchemy, Pydantic, FastAPI, PostgreSQL, pytest, ruff, mypy, React/frontend build system +## arch +Specification-driven change management using OpenSpec schema with structured documentation (design doc, proposal, task tracking) for cross-stack database migration and feature removal. +## tags +tool, type, design, database, alembic, frontend, .openspec, records +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md new file mode 100644 index 0000000..c8d2805 --- /dev/null +++ b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/archive/2026-05-23-remove-built-in-tools/specs (index) +dir: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs + +## role +Contains archived specification documents for a planned removal of built-in tools feature, dated May 23, 2026. +## parent +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.index.md +map: openspec/changes/archive/2026-05-23-remove-built-in-tools/.pi-map.md +## children +- openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types + index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md + map: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md new file mode 100644 index 0000000..60b06fd --- /dev/null +++ b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-23-remove-built-in-tools/specs +dir: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs + +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md + +## role +Contains archived specification documents for a planned removal of built-in tools feature, dated May 23, 2026. +## files +## arch +Simple archival storage pattern using date-based directory naming with no active code or architectural patterns. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md new file mode 100644 index 0000000..59cd6c5 --- /dev/null +++ b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types (index) +dir: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types + +## role +Contains archived software specification documents for historical tool type management system changes from May 2026. +## parent +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md +map: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.md b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.md new file mode 100644 index 0000000..df703e2 --- /dev/null +++ b/openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types +dir: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types + +index: openspec/changes/archive/2026-05-23-remove-built-in-tools/specs/tool-types/.pi-map.index.md + +## role +Contains archived software specification documents for historical tool type management system changes from May 2026. +## files +- spec.md | Software specification document defining modified and removed requirements for a tool type management system +## arch +Document-based specification archive using dated directory versioning with markdown specs for tracking removed/modified requirements. +## tags +spec, software, specification, document, defining, modified, removed, requirements +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md new file mode 100644 index 0000000..83abdf6 --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools (index) +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools + +## role +Design and planning package for implementing customizable terminal startup commands and productivity tools in a WebSocket-based container terminal system +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs + index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md new file mode 100644 index 0000000..3848ecc --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools + +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md + +## role +Design and planning package for implementing customizable terminal startup commands and productivity tools in a WebSocket-based container terminal system +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema version and creation date metadata +- design.md | Design specification for adding per-tool-type terminal startup commands and productivity utilities to a WebSocket-based container terminal system | dep: tool-types-definition, tool-terminal, opencode-web-server, tool-config-management, Docker, WebSocket, bash, Docker Compose +- proposal.md | Proposes adding customizable startup commands to terminal tool types and productivity tools to the OpenCode container +- tasks.md | Task tracking checklist for implementing a `startup_command` feature across database, backend API, terminal execution, frontend, and container tooling | dep: Alembic, SQLAlchemy, Pydantic, FastAPI, WebSocket, bash/tmux/ranger, npm, pytest, mypy, ruff +## arch +Specification-driven development using OpenSpec schema with phased task tracking across full-stack implementation (database → API → execution → frontend → container tooling) +## tags +tool, terminal, design, startup, websocket, container, .openspec, adding +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md new file mode 100644 index 0000000..faa5e14 --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md @@ -0,0 +1,29 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs (index) +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs + +## role +Contains archived specification documents from May 24, 2026 for terminal startup and container tools features. +## parent +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/.pi-map.md +## children +- openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server + index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md + map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.md +- openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal + index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md + map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.md +- openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command + index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md + map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.md +- openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition + index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md + map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md new file mode 100644 index 0000000..bdf35d6 --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs + +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md + +## role +Contains archived specification documents from May 24, 2026 for terminal startup and container tools features. +## files +## arch +Specification-driven development with dated archive organization for historical feature planning and design documentation. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md new file mode 100644 index 0000000..f04ef2f --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server (index) +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server + +## role +Defines requirements for a containerized web server with integrated terminal interface for OpenCode development environment. +## parent +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.md new file mode 100644 index 0000000..563748b --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server + +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/opencode-web-server/.pi-map.index.md + +## role +Defines requirements for a containerized web server with integrated terminal interface for OpenCode development environment. +## files +- spec.md | Defines modified requirements for OpenCode containers to run a web server with a web terminal interface on port 3000 +## arch +Specification-driven architecture using markdown-based requirements documents for container tooling and web service configuration. +## tags +web, spec, defines, modified, requirements, opencode, containers, run +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md new file mode 100644 index 0000000..f32976f --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command (index) +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command + +## role +Defines requirements for adding a pre-shell startup command capability to terminal tool types in the OpenSpec specification. +## parent +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.md new file mode 100644 index 0000000..1e6d2eb --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command + +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal-startup-command/.pi-map.index.md + +## role +Defines requirements for adding a pre-shell startup command capability to terminal tool types in the OpenSpec specification. +## files +- spec.md | Defines requirements for adding an optional `startup_command` field to terminal tool types that executes before the interactive shell in new terminal sessions. +## arch +Specification-driven design using markdown-based requirements documents with versioned archival storage for incremental feature proposals. +## tags +terminal, spec, defines, requirements, adding, optional, startup, command +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md new file mode 100644 index 0000000..4babd83 --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal (index) +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal + +## role +Defines WebSocket terminal session requirements for containerized tool execution with startup commands and session lifecycle management. +## parent +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.md new file mode 100644 index 0000000..3235f47 --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal + +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-terminal/.pi-map.index.md + +## role +Defines WebSocket terminal session requirements for containerized tool execution with startup commands and session lifecycle management. +## files +- spec.md | Defines requirements for WebSocket-based terminal sessions with startup command execution and session management for containerized tools | dep: WebSocket, Docker (docker exec), container runtime, shell/terminal emulation +## arch +Specification-driven design using Markdown-based requirements documents with WebSocket protocol definitions, session state management patterns, and container tool integration interfaces. +## tags +websocket, spec, defines, requirements, terminal, sessions, startup, command +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md new file mode 100644 index 0000000..af169da --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition (index) +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition + +## role +Defines data models and API contracts for a tool type registry that validates containerized tool definitions against templates +## parent +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md +map: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.md b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.md new file mode 100644 index 0000000..7ca4ea9 --- /dev/null +++ b/openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition +dir: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition + +index: openspec/changes/archive/2026-05-24-terminal-startup-and-container-tools/specs/tool-types-definition/.pi-map.index.md + +## role +Defines data models and API contracts for a tool type registry that validates containerized tool definitions against templates +## files +- spec.md | Defines requirements for a ToolType model and REST API endpoints for managing tool definitions with template validation | dep: REST API, Docker Compose, Dockerfile, YAML validation, UUID, authentication/authorization +## arch +Specification-driven API design with model-template validation pattern, using markdown-based requirements documentation for REST endpoint contracts +## tags +spec, defines, requirements, tooltype, model, rest, api, endpoints +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md b/openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md new file mode 100644 index 0000000..04d0930 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles (index) +dir: openspec/changes/archive/2026-05-25-add-config-profiles + +## role +Design and planning package for a new config profile system to replace legacy configuration management with user-owned, composable launch configurations. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-25-add-config-profiles/specs + index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md b/openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md new file mode 100644 index 0000000..8905b77 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles +dir: openspec/changes/archive/2026-05-25-add-config-profiles + +index: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md + +## role +Design and planning package for a new config profile system to replace legacy configuration management with user-owned, composable launch configurations. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema version and creation date metadata +- design.md | Design document for a config profile system that replaces legacy config folders with user-owned, composable, selectable launch configurations for tool instances. | dep: Docker Compose, tool instance start system, config folder system (legacy), database tables (profiles, profile includes, instance profile selection) +- proposal.md | Proposes a new "config profiles" feature to replace legacy config folder mounting with reusable, composable, user-owned launch configurations for tool sessions. +- tasks.md | Project task tracking document outlining a multi-phase software development plan for implementing a config profile system with backend/frontend integration and quality gates. +## arch +Specification-driven design using OpenSpec schema with phased implementation planning (design doc → proposal → task tracking) for a backend/frontend integrated feature rollout. +## tags +config, design, .openspec, document, profile, system, legacy, user +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md new file mode 100644 index 0000000..f89d26e --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md @@ -0,0 +1,29 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs (index) +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs + +## role +Contains archived OpenAPI specification files for a configuration profiles feature addition from May 25, 2026. +## parent +index: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/.pi-map.md +## children +- openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles + index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.md +- openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management + index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.md +- openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances + index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.md +- openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config + index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md new file mode 100644 index 0000000..1dc9dc8 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs + +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md + +## role +Contains archived OpenAPI specification files for a configuration profiles feature addition from May 25, 2026. +## files +## arch +Versioned API specification storage using date-based archival directories with OpenAPI/Swagger specification documents. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md new file mode 100644 index 0000000..5fbd7c8 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles (index) +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles + +## role +Defines system requirements for a user-owned config profile management system with scoped compatibility, content storage, ordered includes, resolution layering, and default selection for launch configurations. +## parent +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.md new file mode 100644 index 0000000..98181d7 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles + +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/config-profiles/.pi-map.index.md + +## role +Defines system requirements for a user-owned config profile management system with scoped compatibility, content storage, ordered includes, resolution layering, and default selection for launch configurations. +## files +- spec.md | Defines system requirements for a user-owned config profile management system with scoped compatibility, content storage, ordered includes, resolution layering, and default selection for launch configurations. +## arch +Specification-driven architecture using Markdown-based requirements documentation with layered resolution, ordered include chains, and scope-based compatibility filtering. +## tags +system, spec, defines, requirements, user, owned, config, profile +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md new file mode 100644 index 0000000..3f68e61 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management (index) +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management + +## role +Defines specification requirements for a tool configuration management system that introduces config profiles to separate runtime fields from reusable launch setup. +## parent +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.md new file mode 100644 index 0000000..66497c7 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management + +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-config-management/.pi-map.index.md + +## role +Defines specification requirements for a tool configuration management system that introduces config profiles to separate runtime fields from reusable launch setup. +## files +- spec.md | Defines modified and removed requirements for a tool configuration system that separates runtime fields from reusable launch setup via config profiles. +## arch +Specification-driven design using requirement-based documentation with explicit categorization of modified/removed requirements for incremental system evolution. +## tags +spec, defines, modified, removed, requirements, tool, configuration, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..c45dbb1 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances (index) +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances + +## role +Defines specifications for tool instance creation mechanisms including clone/mount modes and configuration profile application at startup. +## parent +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..287ba80 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances + +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/tool-instances/.pi-map.index.md + +## role +Defines specifications for tool instance creation mechanisms including clone/mount modes and configuration profile application at startup. +## files +- spec.md | Defines requirements for tool instance creation with clone/mount modes and config profile application at startup +## arch +Specification-driven requirements documentation using Markdown-based design specs with feature-focused modular decomposition. +## tags +spec, defines, requirements, tool, instance, creation, clone, mount +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md new file mode 100644 index 0000000..2ba389a --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config (index) +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config + +## role +Defines requirements for a user configuration profile management system with settings editor and launch-time profile selection UI. +## parent +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.md b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.md new file mode 100644 index 0000000..aa6f926 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config +dir: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config + +index: openspec/changes/archive/2026-05-25-add-config-profiles/specs/user-config/.pi-map.index.md + +## role +Defines requirements for a user configuration profile management system with settings editor and launch-time profile selection UI. +## files +- spec.md | Defines requirements for a config profile management system including a settings editor and launch-time profile selection UI +## arch +Specification-driven design using markdown-based requirements documents that define functional requirements for UI components and user workflows without prescribing implementation details. +## tags +profile, spec, defines, requirements, config, management, system, including +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md new file mode 100644 index 0000000..11cfedc --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability + +## role +Archive directory preserving a completed 2026 mobile usability improvement spec for a React web application's responsive design overhaul. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md new file mode 100644 index 0000000..6aa5c3e --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability +dir: openspec/changes/archive/2026-05-25-mobile-app-usability + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md + +## role +Archive directory preserving a completed 2026 mobile usability improvement spec for a React web application's responsive design overhaul. +## files +- .openspec.yaml | Defines an OpenSpec configuration file specifying a spec-driven schema with a creation date. +- design.md | Design document outlining mobile UX improvements for a React desktop-first web application, focusing on navigation, session management, forms, and touch targets for 320-768px viewports. | dep: React, CSS media queries, mobile browser safe-area-insets, routing system +- proposal.md | Proposes a frontend mobile responsiveness overhaul for the Headquarter web app to make critical workflows usable on mobile devices +- tasks.md | A completed task checklist for implementing comprehensive mobile responsive design across a web application +## arch +Spec-driven documentation pattern with structured design docs (proposal → design → tasks) using OpenSpec schema metadata for versioned change tracking. +## tags +design, mobile, web, .openspec, react, application, proposal, tasks +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md new file mode 100644 index 0000000..41e4251 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md @@ -0,0 +1,35 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs + +## role +Contains archived specification documents from a mobile app usability improvement initiative dated May 25, 2026. +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/.pi-map.md +## children +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances + index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md new file mode 100644 index 0000000..9db8b75 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md + +## role +Contains archived specification documents from a mobile app usability improvement initiative dated May 25, 2026. +## files +## arch +Time-based archival directory structure for version-controlled specification snapshots, using date-prefixed naming convention with descriptive project identifiers. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md new file mode 100644 index 0000000..9c6081f --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation + +## role +Defines frontend UI specifications for responsive cross-platform navigation patterns supporting both desktop and mobile form factors. +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.md new file mode 100644 index 0000000..f60a7f1 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/frontend-foundation/.pi-map.index.md + +## role +Defines frontend UI specifications for responsive cross-platform navigation patterns supporting both desktop and mobile form factors. +## files +- spec.md | Specifies modified responsive layout and navigation requirements for a web application with desktop sidebar and mobile bottom tab bar navigation. +## arch +Specification-driven architecture using markdown-based requirements documents that separate responsive layout concerns into distinct device-targeted navigation patterns (sidebar for desktop, bottom tab bar for mobile). +## tags +navigation, spec, specifies, modified, responsive, layout, requirements, web +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md new file mode 100644 index 0000000..6281d2b --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation + +## role +Defines mobile responsive navigation requirements including bottom tab bar for mobile viewports and safe area support +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.md new file mode 100644 index 0000000..aa2d0f9 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-navigation/.pi-map.index.md + +## role +Defines mobile responsive navigation requirements including bottom tab bar for mobile viewports and safe area support +## files +- spec.md | Defines mobile responsive navigation requirements including bottom tab bar for mobile viewports and safe area support +## arch +Specification document using markdown-based requirements specification pattern with viewport-responsive design and mobile-first UI architecture +## tags +mobile, spec, defines, responsive, navigation, requirements, including, bottom +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md new file mode 100644 index 0000000..b26cf06 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts + +## role +Defines mobile-specific UI/UX requirements for responsive design, touch interactions, and navigation patterns +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.md new file mode 100644 index 0000000..d624735 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-responsive-layouts/.pi-map.index.md + +## role +Defines mobile-specific UI/UX requirements for responsive design, touch interactions, and navigation patterns +## files +- spec.md | Defines mobile-specific UI/UX requirements for responsive design, touch interactions, and navigation patterns +## arch +Specification/documentation pattern using markdown-based requirements documents in a dated archive structure +## tags +spec, defines, mobile, specific, requirements, responsive, design, touch +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md new file mode 100644 index 0000000..cb72a4b --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management + +## role +Defines mobile-responsive UI specifications for session management features including touch-optimized interactions and responsive layouts. +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.md new file mode 100644 index 0000000..aaae94b --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/mobile-session-management/.pi-map.index.md + +## role +Defines mobile-responsive UI specifications for session management features including touch-optimized interactions and responsive layouts. +## files +- spec.md | Specifies mobile-responsive UI requirements for a session management system including touch-optimized cards, creation flow, and list views. +## arch +Specification-driven design using markdown-based requirements documentation with mobile-first UX patterns. +## tags +spec, specifies, mobile, responsive, requirements, session, management, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md new file mode 100644 index 0000000..6edec58 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux + +## role +Defines mobile-optimized interaction requirements for session management in a software specification document. +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.md new file mode 100644 index 0000000..ca5a89f --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/session-lifecycle-ux/.pi-map.index.md + +## role +Defines mobile-optimized interaction requirements for session management in a software specification document. +## files +- spec.md | Defines mobile-optimized interaction requirements for session management in a software specification document. +## arch +Standard Markdown-based specification document using prose requirements documentation pattern. +## tags +spec, defines, mobile, optimized, interaction, requirements, session, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..1a3839b --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances (index) +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances + +## role +Defines mobile responsive design specifications for tool instance management UI components. +## parent +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..0f0c1cc --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances +dir: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances + +index: openspec/changes/archive/2026-05-25-mobile-app-usability/specs/tool-instances/.pi-map.index.md + +## role +Defines mobile responsive design specifications for tool instance management UI components. +## files +- spec.md | Mobile responsive design requirements for instance management UI controls, status display, and creation forms +## arch +Specification-driven documentation pattern using dated archive directories with markdown-based requirements specs. +## tags +spec, mobile, responsive, design, requirements, instance, management, controls +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md new file mode 100644 index 0000000..f7d53d3 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul (index) +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul + +## role +Archive of a 2026 mobile UI/UX overhaul specification for adapting three complex desktop split-pane interfaces to responsive mobile-first designs while preserving desktop experiences. +## parent +index: openspec/changes/archive/.pi-map.index.md +map: openspec/changes/archive/.pi-map.md +## children +- openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs + index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md new file mode 100644 index 0000000..d9d061c --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul + +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md + +## role +Archive of a 2026 mobile UI/UX overhaul specification for adapting three complex desktop split-pane interfaces to responsive mobile-first designs while preserving desktop experiences. +## files +- .openspec.yaml | Defines an OpenSpec configuration file specifying a spec-driven schema with a creation date. +- design.md | Design document specifying mobile-first responsive UI adaptations for three desktop split-pane interfaces (Tool Workshop, Config Profiles, Repo Workspace) while preserving existing desktop experiences. +- proposal.md | Proposes mobile-first redesigns for complex configuration and workspace pages while preserving existing desktop layouts +- tasks.md | Project task checklist tracking mobile UI/UX implementation progress across navigation, list-detail views, tool workshop, config profiles, repo workspace, and testing +## arch +Spec-driven design documentation using OpenSpec schema with structured markdown files separating design rationale (design.md), formal proposal (proposal.md), and implementation tracking (tasks.md) across a phased checklist workflow. +## tags +design, mobile, desktop, workspace, configuration, specifying, .openspec, first +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md new file mode 100644 index 0000000..f6fdc8a --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md @@ -0,0 +1,29 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs (index) +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs + +## role +Contains archived specification documents for a mobile pages overhaul project from May 2026, serving as historical design reference for the openspec changes tracking system. +## parent +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/.pi-map.md +## children +- openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail + index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation + index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace + index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.md +- openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation + index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md + map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.md +## files +## links +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md new file mode 100644 index 0000000..66eb860 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs + +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md + +## role +Contains archived specification documents for a mobile pages overhaul project from May 2026, serving as historical design reference for the openspec changes tracking system. +## files +## arch +Simple archival storage pattern with date-based directory hierarchy (YYYY-MM-DD-prefixed) for immutable specification snapshots, using flat file organization within versioned folders. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md new file mode 100644 index 0000000..31c265f --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail (index) +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail + +## role +Defines UI/UX specifications for mobile-optimized list and detail views in a configuration management system. +## parent +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.md new file mode 100644 index 0000000..320e2e3 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail + +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-list-detail/.pi-map.index.md + +## role +Defines UI/UX specifications for mobile-optimized list and detail views in a configuration management system. +## files +- spec.md | Defines mobile UI requirements for a configuration management system with list views, detail views, editing, and CRUD operations for tool types and config profiles. +## arch +Specification-driven design using markdown-based requirements documentation with hierarchical feature breakdown (list views → detail views → editing flows → CRUD operations) for two distinct entity types (tool types and config profiles). +## tags +views, spec, defines, mobile, requirements, configuration, management, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md new file mode 100644 index 0000000..c706810 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation (index) +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation + +## role +Defines mobile navigation UI requirements for a bottom navigation bar with grouped menu items and expandable submenus. +## parent +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.md new file mode 100644 index 0000000..0c47c39 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation + +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-navigation/.pi-map.index.md + +## role +Defines mobile navigation UI requirements for a bottom navigation bar with grouped menu items and expandable submenus. +## files +- spec.md | Defines requirements for grouped bottom navigation with submenu behavior on mobile +## arch +Specification-driven design using markdown-based requirements documentation with behavioral specifications for responsive mobile interaction patterns. +## tags +spec, defines, requirements, grouped, bottom, navigation, submenu, behavior +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md new file mode 100644 index 0000000..e5d8c3e --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace (index) +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace + +## role +Defines mobile UI requirements for a repository workspace with file tree, editor, git, and terminal views. +## parent +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.md new file mode 100644 index 0000000..2dc1f10 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace + +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-repo-workspace/.pi-map.index.md + +## role +Defines mobile UI requirements for a repository workspace with file tree, editor, git, and terminal views. +## files +- spec.md | Define mobile UI requirements for a repository workspace featuring file tree navigation, editor, git, and terminal views +## arch +Specification-driven design using Markdown-based requirements documentation with date-versioned archiving. +## tags +spec, define, mobile, requirements, repository, workspace, featuring, tree +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md new file mode 100644 index 0000000..d6b312e --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation (index) +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation + +## role +Defines mobile UI requirements for a grouped "Tools" bottom navigation with a bottom sheet menu and active state indication +## parent +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md +map: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.md b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.md new file mode 100644 index 0000000..28948f9 --- /dev/null +++ b/openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation +dir: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation + +index: openspec/changes/archive/2026-05-25-mobile-pages-overhaul/specs/mobile-tools-navigation/.pi-map.index.md + +## role +Defines mobile UI requirements for a grouped "Tools" bottom navigation with a bottom sheet menu and active state indication +## files +- spec.md | Defines mobile UI requirements for a grouped "Tools" bottom navigation with a bottom sheet menu and active state indication +## arch +Specification-driven design using Markdown-based requirements documentation with dated archival organization +## tags +bottom, spec, defines, mobile, requirements, grouped, tools, navigation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/backend-frontend-refactoring/.pi-map.index.md b/openspec/changes/backend-frontend-refactoring/.pi-map.index.md new file mode 100644 index 0000000..ec4ee45 --- /dev/null +++ b/openspec/changes/backend-frontend-refactoring/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/changes/backend-frontend-refactoring (index) +dir: openspec/changes/backend-frontend-refactoring + +## role +This package contains planning and specification documents for a pure structural refactoring to decompose monolithic backend/frontend modules into domain-based subpackages while preserving all API contracts and behavior. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +- design.md +- proposal.md +- spec.md +- tasks.md +## links +index: openspec/changes/backend-frontend-refactoring/.pi-map.index.md +map: openspec/changes/backend-frontend-refactoring/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/backend-frontend-refactoring/.pi-map.md b/openspec/changes/backend-frontend-refactoring/.pi-map.md new file mode 100644 index 0000000..f884f16 --- /dev/null +++ b/openspec/changes/backend-frontend-refactoring/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/backend-frontend-refactoring +dir: openspec/changes/backend-frontend-refactoring + +index: openspec/changes/backend-frontend-refactoring/.pi-map.index.md + +## role +This package contains planning and specification documents for a pure structural refactoring to decompose monolithic backend/frontend modules into domain-based subpackages while preserving all API contracts and behavior. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Architecture design document for a large-scale backend/frontend refactoring to decompose monolithic modules into domain-based subpackages while preserving API contracts and behavior | dep: FastAPI, Pydantic, SQLAlchemy, Docker, cloudflared, React/TypeScript +- proposal.md | This file is a technical proposal document outlining a pure structural refactoring to split monolithic backend files and reorganize frontend code without changing any behavior. +- spec.md | Defines a pure structural refactoring specification for extracting schemas, splitting monolithic services, reorganizing frontend features, and standardizing naming conventions without changing any behavior or API contracts. | dep: Pydantic, FastAPI (implied by Depends, API routers), SQLAlchemy AsyncSession, React/TypeScript frontend, Docker, ruff, npm +- tasks.md | Defines a multi-phase refactoring plan to reorganize a Python/FastAPI backend and TypeScript frontend codebase into modular subpackages with verification steps | dep: FastAPI, Docker, pytest, ruff, py_compile, npm, TypeScript, React Router +## arch +Documentation-driven refactoring specification using OpenSpec schema with multi-phase task breakdown, covering Python/FastAPI backend decomposition (schemas, services, routers) and TypeScript frontend reorganization (features, shared components) with verification gates. +## tags +frontend, refactoring, defines, design, backend, monolithic, behavior, fastapi +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/.pi-map.index.md b/openspec/changes/config-profile-git-mounts/.pi-map.index.md new file mode 100644 index 0000000..e626c65 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/config-profile-git-mounts (index) +dir: openspec/changes/config-profile-git-mounts + +## role +Implements git repository mount support for config profiles to enable version-controlled dotfiles and persistent configuration in containers. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- openspec/changes/config-profile-git-mounts/specs + index: openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md + map: openspec/changes/config-profile-git-mounts/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/config-profile-git-mounts/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/.pi-map.md b/openspec/changes/config-profile-git-mounts/.pi-map.md new file mode 100644 index 0000000..8a424d3 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/config-profile-git-mounts +dir: openspec/changes/config-profile-git-mounts + +index: openspec/changes/config-profile-git-mounts/.pi-map.index.md + +## role +Implements git repository mount support for config profiles to enable version-controlled dotfiles and persistent configuration in containers. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- design.md | Design document for adding git repository mount support to config profiles in a container management system | dep: ConfigProfile, git repositories, clone service, instance startup, Docker/volume mounts, database/JSONB +- proposal.md | Proposes adding git repository mounts to config profiles for version-controlled dotfiles in containers | dep: config profiles, git repositories, docker/container startup, database migrations, frontend UI/API +- tasks.md | A completed task checklist for implementing git repository mount functionality across database models, backend API, frontend UI, and documentation | dep: Alembic, SQLAlchemy, Pydantic, FastAPI, TypeScript, Docker Compose, git clone service +## arch +Specification-driven development using OpenSpec schema definitions, with design-proposal-implementation workflow spanning database models, REST API, frontend UI, and documentation layers. +## tags +design, git, repository, .openspec, adding, mount, config, profiles +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md b/openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md new file mode 100644 index 0000000..9147b04 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/changes/config-profile-git-mounts/specs (index) +dir: openspec/changes/config-profile-git-mounts/specs + +## role +Contains OpenAPI specification files for the config-profile-git-mounts API endpoint that manages Git repository mount configurations for deployment profiles. +## parent +index: openspec/changes/config-profile-git-mounts/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/.pi-map.md +## children +- openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts + index: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md + map: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md +- openspec/changes/config-profile-git-mounts/specs/tool-instances + index: openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md + map: openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.md +## files +## links +index: openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/specs/.pi-map.md b/openspec/changes/config-profile-git-mounts/specs/.pi-map.md new file mode 100644 index 0000000..eac06f3 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/config-profile-git-mounts/specs +dir: openspec/changes/config-profile-git-mounts/specs + +index: openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md + +## role +Contains OpenAPI specification files for the config-profile-git-mounts API endpoint that manages Git repository mount configurations for deployment profiles. +## files +## arch +REST API specification directory using OpenAPI/Swagger format with YAML/JSON specs defining request/response schemas, paths, and operations for Git mount configuration management. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md b/openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md new file mode 100644 index 0000000..35e5bb5 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts (index) +dir: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts + +## role +Defines requirements for mounting git repositories into config profiles within a container management system +## parent +index: openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md b/openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md new file mode 100644 index 0000000..a736c4b --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts +dir: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts + +index: openspec/changes/config-profile-git-mounts/specs/config-profile-git-mounts/.pi-map.index.md + +## role +Defines requirements for mounting git repositories into config profiles within a container management system +## files +- spec.md | Defines requirements for adding git repository mounting capabilities to config profiles in a container management system | dep: git, container runtime, config profile system, UI/profile editor +## arch +Specification-driven requirements document using markdown-based documentation pattern with no executable code +## tags +git, spec, defines, requirements, adding, repository, mounting, capabilities +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md b/openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..97d9723 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-git-mounts/specs/tool-instances (index) +dir: openspec/changes/config-profile-git-mounts/specs/tool-instances + +## role +Defines specifications for mounting git repositories into tool instances during startup based on configuration profiles. +## parent +index: openspec/changes/config-profile-git-mounts/specs/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md +map: openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.md b/openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..d6b1f66 --- /dev/null +++ b/openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-git-mounts/specs/tool-instances +dir: openspec/changes/config-profile-git-mounts/specs/tool-instances + +index: openspec/changes/config-profile-git-mounts/specs/tool-instances/.pi-map.index.md + +## role +Defines specifications for mounting git repositories into tool instances during startup based on configuration profiles. +## files +- spec.md | Defines requirements for git repository mount processing during tool instance startup, including config profile resolution, bind mount creation, auto-cloning, and failure handling. +## arch +Specification-driven design using markdown-based requirements documents with clear functional boundaries for config resolution, mount lifecycle, and error handling patterns. +## tags +mount, spec, defines, requirements, git, repository, processing, tool +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-includes-ui/.pi-map.index.md b/openspec/changes/config-profile-includes-ui/.pi-map.index.md new file mode 100644 index 0000000..f90f86f --- /dev/null +++ b/openspec/changes/config-profile-includes-ui/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/config-profile-includes-ui (index) +dir: openspec/changes/config-profile-includes-ui + +## role +Design and planning package for adding drag-and-drop profile includes management UI to a config profile editor frontend +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- openspec/changes/config-profile-includes-ui/specs + index: openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md + map: openspec/changes/config-profile-includes-ui/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/config-profile-includes-ui/.pi-map.index.md +map: openspec/changes/config-profile-includes-ui/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-includes-ui/.pi-map.md b/openspec/changes/config-profile-includes-ui/.pi-map.md new file mode 100644 index 0000000..a8bbca4 --- /dev/null +++ b/openspec/changes/config-profile-includes-ui/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/config-profile-includes-ui +dir: openspec/changes/config-profile-includes-ui + +index: openspec/changes/config-profile-includes-ui/.pi-map.index.md + +## role +Design and planning package for adding drag-and-drop profile includes management UI to a config profile editor frontend +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema version and creation date metadata +- design.md | Design document for adding drag-and-drop profile includes management UI to an existing config profile editor frontend | dep: React, HTML5 Drag and Drop API, config profiles backend API (listConfigProfiles, updateConfigProfile, updateProfileIncludes), existing scope badge components +- proposal.md | Proposes a UI feature for drag-and-drop management of ordered config profile includes with cycle detection and scope visualization | dep: config profiles backend API, frontend React app, drag-and-drop library +- tasks.md | Task tracking document for implementing a profile "includes" feature with UI, drag-and-drop reordering, and error handling +## arch +Specification-driven development using OpenSpec schema with phased task tracking, design documents, and proposal-driven feature planning +## tags +drag, profile, design, drop, includes, .openspec, document, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md b/openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md new file mode 100644 index 0000000..c6202aa --- /dev/null +++ b/openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/config-profile-includes-ui/specs (index) +dir: openspec/changes/config-profile-includes-ui/specs + +## role +Contains UI specification files for the configuration profile includes feature, defining behavior and requirements for the user interface components. +## parent +index: openspec/changes/config-profile-includes-ui/.pi-map.index.md +map: openspec/changes/config-profile-includes-ui/.pi-map.md +## children +- openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management + index: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md + map: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.md +## files +## links +index: openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md +map: openspec/changes/config-profile-includes-ui/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-includes-ui/specs/.pi-map.md b/openspec/changes/config-profile-includes-ui/specs/.pi-map.md new file mode 100644 index 0000000..088dde2 --- /dev/null +++ b/openspec/changes/config-profile-includes-ui/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/config-profile-includes-ui/specs +dir: openspec/changes/config-profile-includes-ui/specs + +index: openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md + +## role +Contains UI specification files for the configuration profile includes feature, defining behavior and requirements for the user interface components. +## files +## arch +Specification-driven development with isolated UI specs directory following a feature-based organizational pattern, likely using declarative specification formats (e.g., JSON/YAML) to define UI component behavior, state management, and interaction flows for the config-profile-includes feature. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md b/openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md new file mode 100644 index 0000000..b9942b3 --- /dev/null +++ b/openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management (index) +dir: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management + +## role +Defines UI specifications for managing configuration profile includes with display, add/remove/reorder, and save capabilities. +## parent +index: openspec/changes/config-profile-includes-ui/specs/.pi-map.index.md +map: openspec/changes/config-profile-includes-ui/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md +map: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.md b/openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.md new file mode 100644 index 0000000..0b716fb --- /dev/null +++ b/openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management +dir: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management + +index: openspec/changes/config-profile-includes-ui/specs/config-profile-includes-management/.pi-map.index.md + +## role +Defines UI specifications for managing configuration profile includes with display, add/remove/reorder, and save capabilities. +## files +- spec.md | Define requirements for a config profile editor feature that manages profile includes with display, add/remove/reorder functionality, and save capabilities | dep: profile editor UI, includes API, profile update API, dropdown component, drag-and-drop system +## arch +Specification-driven design using markdown-based requirements documents with functional decomposition into display, management, and persistence concerns. +## tags +profile, spec, define, requirements, config, editor, feature, manages +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md b/openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md new file mode 100644 index 0000000..3469969 --- /dev/null +++ b/openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-multi-repo-mounts (index) +dir: openspec/changes/config-profile-multi-repo-mounts + +## role +Defines a completed feature specification for enabling multiple source/target mappings per git mount entry in Config Profiles with single repository cloning. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +## links +index: openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md +map: openspec/changes/config-profile-multi-repo-mounts/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/config-profile-multi-repo-mounts/.pi-map.md b/openspec/changes/config-profile-multi-repo-mounts/.pi-map.md new file mode 100644 index 0000000..51264ee --- /dev/null +++ b/openspec/changes/config-profile-multi-repo-mounts/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/config-profile-multi-repo-mounts +dir: openspec/changes/config-profile-multi-repo-mounts + +index: openspec/changes/config-profile-multi-repo-mounts/.pi-map.index.md + +## role +Defines a completed feature specification for enabling multiple source/target mappings per git mount entry in Config Profiles with single repository cloning. +## files +- .openspec.yaml | Define a completed feature specification for enabling multiple source/target mappings per git mount entry in Config Profiles with single repository cloning +## arch +Specification-driven development using OpenSpec YAML format for structured feature documentation with implementation status tracking. +## tags +.openspec, define, completed, feature, specification, enabling, multiple, source +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/container-monitoring-notifications/.pi-map.index.md b/openspec/changes/container-monitoring-notifications/.pi-map.index.md new file mode 100644 index 0000000..d6bd5b4 --- /dev/null +++ b/openspec/changes/container-monitoring-notifications/.pi-map.index.md @@ -0,0 +1,28 @@ +# openspec/changes/container-monitoring-notifications (index) +dir: openspec/changes/container-monitoring-notifications + +## role +Defines specifications, design, and implementation plans for a real-time container monitoring and notification subsystem using SSE streaming with backend event bus and frontend toast UI. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +- apply-pr1.md +- apply-pr2.md +- apply-pr3.md +- apply-progress.md +- design.md +- explore.md +- proposal.md +- spec.md +- tasks.md +## links +index: openspec/changes/container-monitoring-notifications/.pi-map.index.md +map: openspec/changes/container-monitoring-notifications/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/container-monitoring-notifications/.pi-map.md b/openspec/changes/container-monitoring-notifications/.pi-map.md new file mode 100644 index 0000000..b9875cc --- /dev/null +++ b/openspec/changes/container-monitoring-notifications/.pi-map.md @@ -0,0 +1,28 @@ +# openspec/changes/container-monitoring-notifications +dir: openspec/changes/container-monitoring-notifications + +index: openspec/changes/container-monitoring-notifications/.pi-map.index.md + +## role +Defines specifications, design, and implementation plans for a real-time container monitoring and notification subsystem using SSE streaming with backend event bus and frontend toast UI. +## files +- .openspec.yaml | Defines an OpenSpec project specification for a container monitoring and notification system +- apply-pr1.md | Documents the implementation of a backend core for container monitoring and notifications, including database migrations, SQLAlchemy models, event bus, health monitoring, SSE endpoint, lifecycle hooks, structured logging, and unit tests. | dep: SQLAlchemy, Alembic, FastAPI, asyncio, uvicorn, pytest, ruff, Docker, JSON +- apply-pr2.md | Documents the implementation of a frontend UI for container monitoring and notifications using Server-Sent Events, custom toast system, and real-time status updates. | dep: React, EventSource, TypeScript, Vitest, CSS, AbortController, fetch API +- apply-pr3.md | Documents the completion status and implementation details of PR-3 for container monitoring and notifications integration, including tests, API endpoints, documentation updates, and quality gate results. +- apply-progress.md | Documents the implementation progress of two pull requests for a container monitoring and notifications system, covering backend core services (EventBus, HealthMonitor, SSE endpoints) and frontend UI components (SSE hooks, custom toast system, real-time status updates). | dep: pytest, vitest, SQLAlchemy, Alembic, FastAPI/SSE, React, TypeScript, EventSource, ruff, eslint, asyncio, inspect, collections.abc +- design.md | Design document for a container monitoring and notification system using in-memory pub/sub, background health polling, SSE streaming, and frontend toast notifications | dep: FastAPI, SQLAlchemy, Alembic, asyncio, Docker, SSE/EventSource, sonner, TypeScript, Python +- explore.md | Exploratory analysis document identifying gaps and recommending architecture for container monitoring, health checks, logging, and notifications in a Docker-based tool instance management system. | dep: FastAPI, Docker CLI, SQLAlchemy, cloudflared, asyncio, SSE, React/frontend stack +- proposal.md | Proposes a container monitoring and real-time notification system using SSE to push lifecycle events and health status from a FastAPI backend to a frontend toast component, replacing 30-second polling with instant visibility into container failures, tunnel health, and audit trails. | dep: FastAPI, SSE/StreamingResponse, asyncio, Docker CLI, PostgreSQL, JSONB, UUID, WebSocket (existing terminal), sonner/toast library +- spec.md | Specifies a container monitoring and notification system using an in-memory event bus, background health monitor, SSE streaming, and frontend toast notifications with persistent audit logging. | dep: asyncio, PostgreSQL, Docker CLI, HTTP/tunnel, SSE/Server-Sent Events, JWT/cookie auth, JSON logging +- tasks.md | Defines a detailed software development plan for building a container monitoring and notification system across backend and frontend, broken into chained PRs with specific tasks, acceptance criteria, and dependencies. | dep: FastAPI, SQLAlchemy, Alembic, Docker, asyncio, SSE/EventSource, React, sonner, pytest +## arch +Event-driven architecture with in-memory pub/sub (EventBus), background health polling, Server-Sent Events (SSE) for server-to-client streaming, and decoupled frontend toast notification system; implemented across chained PRs with FastAPI backend and React frontend. +## tags +sse, container, monitoring, system, apply, notifications, fastapi, asyncio +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/git-mount-url-validation/.pi-map.index.md b/openspec/changes/git-mount-url-validation/.pi-map.index.md new file mode 100644 index 0000000..44d1e3d --- /dev/null +++ b/openspec/changes/git-mount-url-validation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/git-mount-url-validation (index) +dir: openspec/changes/git-mount-url-validation + +## role +Defines the specification and completion criteria for a high-priority feature that validates Git mount URLs. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +## links +index: openspec/changes/git-mount-url-validation/.pi-map.index.md +map: openspec/changes/git-mount-url-validation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/git-mount-url-validation/.pi-map.md b/openspec/changes/git-mount-url-validation/.pi-map.md new file mode 100644 index 0000000..fe6c812 --- /dev/null +++ b/openspec/changes/git-mount-url-validation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/git-mount-url-validation +dir: openspec/changes/git-mount-url-validation + +index: openspec/changes/git-mount-url-validation/.pi-map.index.md + +## role +Defines the specification and completion criteria for a high-priority feature that validates Git mount URLs. +## files +- .openspec.yaml | Defines an OpenSpec specification for a completed high-priority feature named "git-mount-url-validation" +## arch +Declarative specification pattern using OpenSpec YAML to formalize feature requirements and track completion status. +## tags +.openspec, defines, openspec, specification, completed, high, priority, feature +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/home-path-expansion/.pi-map.index.md b/openspec/changes/home-path-expansion/.pi-map.index.md new file mode 100644 index 0000000..6b1c496 --- /dev/null +++ b/openspec/changes/home-path-expansion/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/home-path-expansion (index) +dir: openspec/changes/home-path-expansion + +## role +Defines a completed feature specification for resolving home directory path expansion (~ and $HOME) in container mount target paths based on manifest user configuration. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +## links +index: openspec/changes/home-path-expansion/.pi-map.index.md +map: openspec/changes/home-path-expansion/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/home-path-expansion/.pi-map.md b/openspec/changes/home-path-expansion/.pi-map.md new file mode 100644 index 0000000..7e19885 --- /dev/null +++ b/openspec/changes/home-path-expansion/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/home-path-expansion +dir: openspec/changes/home-path-expansion + +index: openspec/changes/home-path-expansion/.pi-map.index.md + +## role +Defines a completed feature specification for resolving home directory path expansion (~ and $HOME) in container mount target paths based on manifest user configuration. +## files +- .openspec.yaml | Defines a completed feature specification for resolving home directory path expansion (~ and $HOME) in container mount target paths based on manifest user configuration. +## arch +Specification-driven design using YAML-based OpenSpec format with feature completion tracking, documenting requirements for shell-style variable expansion integrated with container manifest user configuration. +## tags +home, .openspec, defines, completed, feature, specification, resolving, directory +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/.pi-map.index.md b/openspec/changes/mobile-terminal-ux/.pi-map.index.md new file mode 100644 index 0000000..04d16c6 --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/mobile-terminal-ux (index) +dir: openspec/changes/mobile-terminal-ux + +## role +Defines specifications and implementation plans for a mobile-responsive web-based terminal interface with touch controls and virtual keyboard optimization. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- openspec/changes/mobile-terminal-ux/specs + index: openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md + map: openspec/changes/mobile-terminal-ux/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/mobile-terminal-ux/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/.pi-map.md b/openspec/changes/mobile-terminal-ux/.pi-map.md new file mode 100644 index 0000000..ca16ee2 --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/mobile-terminal-ux +dir: openspec/changes/mobile-terminal-ux + +index: openspec/changes/mobile-terminal-ux/.pi-map.index.md + +## role +Defines specifications and implementation plans for a mobile-responsive web-based terminal interface with touch controls and virtual keyboard optimization. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema version and creation date metadata +- design.md | Design document for making a web-based terminal mobile-friendly by addressing virtual keyboard handling, maximizing screen real estate, and providing special key access without adding new dependencies. | dep: React, xterm.js, browser APIs (Visual Viewport API, Clipboard API, WebSocket) +- proposal.md | Proposes a mobile-optimized terminal interface with special keys toolbar, dynamic viewport handling, and touch gestures to make terminal sessions usable on mobile devices. | dep: xterm.js, React, visualViewport API +- tasks.md | Task tracking checklist for implementing a mobile-responsive terminal interface with WebSocket connectivity, touch-friendly controls, and virtual keyboard handling. | dep: React, Visual Viewport API, WebSocket, Visibility API, localStorage, CSS transitions, npm +## arch +Documentation-driven specification pattern using OpenSpec metadata with separate design, proposal, and task-tracking documents to progressively define mobile UX requirements. +## tags +terminal, mobile, design, handling, react, .openspec, friendly, virtual +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md b/openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md new file mode 100644 index 0000000..6a308cf --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/mobile-terminal-ux/specs (index) +dir: openspec/changes/mobile-terminal-ux/specs + +## role +Defines specifications and requirements for improving the mobile terminal user experience in the OpenSpec change management system. +## parent +index: openspec/changes/mobile-terminal-ux/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/.pi-map.md +## children +- openspec/changes/mobile-terminal-ux/specs/frontend-foundation + index: openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md + map: openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.md +- openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux + index: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md + map: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.md +- openspec/changes/mobile-terminal-ux/specs/tool-terminal + index: openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md + map: openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.md +## files +## links +index: openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/.pi-map.md b/openspec/changes/mobile-terminal-ux/specs/.pi-map.md new file mode 100644 index 0000000..ea9a818 --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/mobile-terminal-ux/specs +dir: openspec/changes/mobile-terminal-ux/specs + +index: openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md + +## role +Defines specifications and requirements for improving the mobile terminal user experience in the OpenSpec change management system. +## files +## arch +Document-driven specification pattern using structured change proposals with versioned UX requirements for mobile terminal interfaces. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md b/openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md new file mode 100644 index 0000000..bda5a5a --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/mobile-terminal-ux/specs/frontend-foundation (index) +dir: openspec/changes/mobile-terminal-ux/specs/frontend-foundation + +## role +Defines frontend UI specifications for responsive layout components with mobile terminal adaptations. +## parent +index: openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.md b/openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.md new file mode 100644 index 0000000..9aa551e --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/mobile-terminal-ux/specs/frontend-foundation +dir: openspec/changes/mobile-terminal-ux/specs/frontend-foundation + +index: openspec/changes/mobile-terminal-ux/specs/frontend-foundation/.pi-map.index.md + +## role +Defines frontend UI specifications for responsive layout components with mobile terminal adaptations. +## files +- spec.md | Defines modified requirements for a responsive application layout component with desktop/mobile adaptations and a specialized minimal header for mobile terminal pages. +## arch +Specification-driven responsive design pattern with breakpoint-based desktop/mobile variants and specialized mobile terminal header component. +## tags +mobile, spec, defines, modified, requirements, responsive, application, layout +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md b/openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md new file mode 100644 index 0000000..4fc05c0 --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux (index) +dir: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux + +## role +Defines UI/UX specifications for mobile terminal interfaces including responsive design, touch interactions, and virtual keyboard handling. +## parent +index: openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.md b/openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.md new file mode 100644 index 0000000..cb20734 --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux +dir: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux + +index: openspec/changes/mobile-terminal-ux/specs/mobile-terminal-ux/.pi-map.index.md + +## role +Defines UI/UX specifications for mobile terminal interfaces including responsive design, touch interactions, and virtual keyboard handling. +## files +- spec.md | Specifies mobile terminal UI/UX requirements including responsive layout, special keys toolbar, virtual keyboard handling, touch gestures, screen orientation, copy/paste, and font scaling for a web-based terminal application. | dep: WebSocket, xterm.js, Visual Viewport API, localStorage +## arch +Specification-driven design using markdown-based requirements documents with functional grouping of mobile-specific interaction patterns. +## tags +terminal, spec, specifies, mobile, requirements, including, responsive, layout +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md b/openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md new file mode 100644 index 0000000..c82907f --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/mobile-terminal-ux/specs/tool-terminal (index) +dir: openspec/changes/mobile-terminal-ux/specs/tool-terminal + +## role +Defines functional requirements for a touch-optimized mobile terminal interface using WebSocket connectivity. +## parent +index: openspec/changes/mobile-terminal-ux/specs/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md +map: openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.md b/openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.md new file mode 100644 index 0000000..41ad722 --- /dev/null +++ b/openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/mobile-terminal-ux/specs/tool-terminal +dir: openspec/changes/mobile-terminal-ux/specs/tool-terminal + +index: openspec/changes/mobile-terminal-ux/specs/tool-terminal/.pi-map.index.md + +## role +Defines functional requirements for a touch-optimized mobile terminal interface using WebSocket connectivity. +## files +- spec.md | Specifies requirements for a mobile-responsive WebSocket terminal application with touch gestures, special keys, and adaptive layout | dep: xterm.js, WebSocket, browser clipboard API, localStorage, viewport meta tag +## arch +Specification-driven requirements document with no implementation architecture; describes a responsive UI pattern with adaptive layout, gesture-based input, and virtual special-key handling for mobile constraints. +## tags +websocket, spec, specifies, requirements, mobile, responsive, terminal, application +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/mount-specificity-ordering/.pi-map.index.md b/openspec/changes/mount-specificity-ordering/.pi-map.index.md new file mode 100644 index 0000000..c625751 --- /dev/null +++ b/openspec/changes/mount-specificity-ordering/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/mount-specificity-ordering (index) +dir: openspec/changes/mount-specificity-ordering + +## role +Defines a formal specification for tracking the completion status of a mount specificity ordering bug fix in the OpenSpec system. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +## links +index: openspec/changes/mount-specificity-ordering/.pi-map.index.md +map: openspec/changes/mount-specificity-ordering/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/mount-specificity-ordering/.pi-map.md b/openspec/changes/mount-specificity-ordering/.pi-map.md new file mode 100644 index 0000000..e7158bd --- /dev/null +++ b/openspec/changes/mount-specificity-ordering/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/mount-specificity-ordering +dir: openspec/changes/mount-specificity-ordering + +index: openspec/changes/mount-specificity-ordering/.pi-map.index.md + +## role +Defines a formal specification for tracking the completion status of a mount specificity ordering bug fix in the OpenSpec system. +## files +- .openspec.yaml | Defines an OpenSpec specification for a completed high-priority fix related to mount specificity ordering +## arch +Uses OpenSpec YAML-based specification pattern for issue/change tracking with structured metadata and status definitions. +## tags +.openspec, defines, openspec, specification, completed, high, priority, fix +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/multi-session-terminal-ux/.pi-map.index.md b/openspec/changes/multi-session-terminal-ux/.pi-map.index.md new file mode 100644 index 0000000..b085c70 --- /dev/null +++ b/openspec/changes/multi-session-terminal-ux/.pi-map.index.md @@ -0,0 +1,26 @@ +# openspec/changes/multi-session-terminal-ux (index) +dir: openspec/changes/multi-session-terminal-ux + +## role +Open specification and design documentation for implementing multi-session terminal UX in a web-based tool instance platform +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +- apply-pr1.md +- apply-pr2.md +- apply-pr3.md +- design.md +- explore.md +- proposal.md +- tasks.md +## links +index: openspec/changes/multi-session-terminal-ux/.pi-map.index.md +map: openspec/changes/multi-session-terminal-ux/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/multi-session-terminal-ux/.pi-map.md b/openspec/changes/multi-session-terminal-ux/.pi-map.md new file mode 100644 index 0000000..15cd520 --- /dev/null +++ b/openspec/changes/multi-session-terminal-ux/.pi-map.md @@ -0,0 +1,26 @@ +# openspec/changes/multi-session-terminal-ux +dir: openspec/changes/multi-session-terminal-ux + +index: openspec/changes/multi-session-terminal-ux/.pi-map.index.md + +## role +Open specification and design documentation for implementing multi-session terminal UX in a web-based tool instance platform +## files +- .openspec.yaml | Defines an open specification for a multi-session terminal user experience project +- apply-pr1.md | Documents the implementation of database schema, Alembic migration, and TerminalManager multi-session core for a multi-session terminal UX feature. | dep: Alembic, SQLAlchemy, aiosqlite, asyncio, pytest, TerminalSession, TerminalManager, UUIDPrimaryKeyMixin, TimestampMixin, SessionLocal +- apply-pr2.md | Empty file with no functionality +- apply-pr3.md | Documents a pull request implementing a frontend multi-session terminal UI with tabbed management, fullscreen mode, keyboard shortcuts, and mobile support. | dep: React, TypeScript, WebSocket, CSS, Python (backend terminal manager), testing framework +- design.md | Software design document specifying architecture and implementation for adding multi-session terminal support (up to 5 concurrent sessions) to an existing tool instance platform | dep: FastAPI, SQLAlchemy, Alembic, React, xterm.js, WebSocket, PTY, docker exec, Python, TypeScript +- explore.md | Explores architectural options for adding multi-session terminal support to an existing persistent terminal system, evaluating backend, frontend, protocol, and database design choices with recommendations for MVP implementation. | dep: TerminalManager, TerminalSession, TerminalComponent, TerminalPage, MobileTerminalWrapper, xterm.js, FastAPI, SQLAlchemy, alembic +- proposal.md | Proposes architectural changes to support multiple concurrent terminal sessions per tool instance with improved UI/UX features | dep: TerminalManager, TerminalSession, api/terminal.py, TerminalComponent, terminal.tsx, WebSocket protocol, database schema +- tasks.md | A software design document detailing a 12-task implementation plan for adding multi-session terminal UX support to a web application, organized across 3 stacked pull requests with TDD acceptance criteria. | dep: Alembic, SQLAlchemy, FastAPI, WebSocket, React, TypeScript, xterm.js, PTY, UUID, pytest, Jest/RTL +## arch +Specification-driven incremental architecture using stacked PRs (backend→API→frontend), tabbed terminal UI with WebSocket protocol, database-backed session persistence, and TDD acceptance criteria +## tags +terminal, multi, session, apply, alembic, support, design, implementation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/notification-center/.pi-map.index.md b/openspec/changes/notification-center/.pi-map.index.md new file mode 100644 index 0000000..73e9585 --- /dev/null +++ b/openspec/changes/notification-center/.pi-map.index.md @@ -0,0 +1,29 @@ +# openspec/changes/notification-center (index) +dir: openspec/changes/notification-center + +## role +Design and specification package for a full-stack Notification Center feature, containing architectural documents, implementation plans, and progress tracking across 4 stacked PRs. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +- apply-pr1.md +- apply-pr2.md +- apply-pr3.md +- apply-pr4.md +- apply-progress.md +- design.md +- explore.md +- proposal.md +- spec.md +- tasks.md +## links +index: openspec/changes/notification-center/.pi-map.index.md +map: openspec/changes/notification-center/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/notification-center/.pi-map.md b/openspec/changes/notification-center/.pi-map.md new file mode 100644 index 0000000..9b15dfb --- /dev/null +++ b/openspec/changes/notification-center/.pi-map.md @@ -0,0 +1,29 @@ +# openspec/changes/notification-center +dir: openspec/changes/notification-center + +index: openspec/changes/notification-center/.pi-map.index.md + +## role +Design and specification package for a full-stack Notification Center feature, containing architectural documents, implementation plans, and progress tracking across 4 stacked PRs. +## files +- .openspec.yaml | Defines an OpenAPI specification metadata file for a notification center service +- apply-pr1.md | Documents the implementation, testing, and validation of a backend notification center system for a FastAPI/SQLAlchemy application. | dep: FastAPI, SQLAlchemy, Alembic, Pydantic, pytest, ruff, SQLite/PostgreSQL +- apply-pr2.md | This file is a completion report documenting the implementation of backend integration for a Notification Center (PR-2), covering wiring lifecycle hooks and health monitoring to a notification service, extending user configuration schemas, and validating through TDD with integration tests. | dep: notification_service, event_bus, lifecycle_hooks, health_monitor, user_config, Pydantic, pytest, unittest.mock, ruff, Alembic +- apply-pr3.md | Documents the implementation, testing, and validation of a frontend Notification Center feature (PR-3) including React components, hooks, state management, API client, and CSS styles. | dep: React, @phosphor-icons/react, vitest, testing-library, TypeScript, ESLint, CSS variables +- apply-pr4.md | Documents the implementation of toast notification coordination with user-configurable preferences for a notification center system. | dep: React, TypeScript, Vitest, UserConfig API, PATCH /user-config, tsc, eslint +- apply-progress.md | Documents the TDD-driven implementation progress of a full-stack Notification Center feature across 4 PRs, including backend API, frontend components, and toast coordination, with test evidence, file changes, and technical decisions. | dep: FastAPI, SQLAlchemy, Alembic, Pydantic, React, TypeScript, Vitest, pytest, ruff, ESLint, tsc, @phosphor-icons/react, unittest.mock +- design.md | Design document for a cross-cutting notification center system with backend FastAPI service, frontend React components, and event producer integration. | dep: FastAPI, SQLAlchemy/AsyncSession, Alembic, Pydantic, React/Context, SSE/event bus, Phosphor icons, lifecycle hooks, health monitor +- explore.md | Exploratory design document for adding a persistent, user-scoped Notification Center to an existing toast-only notification system, covering current state analysis, gaps, integration points, risks, and phased implementation roadmap. | dep: FastAPI, SQLAlchemy, Alembic, React, SSE/EventSource, Phosphor Icons, InstanceEventBus, HealthMonitor, LifecycleHooks, Toast System, Event Bridge +- proposal.md | This is a software design document (SDD) proposal for building a persistent, user-scoped notification center with REST API, database storage, and React frontend components, replacing ephemeral SSE-driven toasts. | dep: SQLAlchemy, Alembic, React, FastAPI/REST, PhosphorIcons, SSE (existing), UserConfig system, InstanceEventBus, HealthMonitor, lifecycle_hooks +- spec.md | Defines a full-stack notification center system with per-user persistent notifications, REST API, frontend UI, and user-scoped preferences for category muting and toast suppression. | dep: FastAPI, SQLAlchemy, Alembic, PostgreSQL, React/frontend, SSE/EventToastBridge, Phosphor icons, UserConfig, lifecycle_hooks, health_monitor +- tasks.md | Defines a detailed task breakdown for implementing a Notification Center feature across 4 stacked PRs, covering backend core, backend integration, frontend core, and toast coordination with specific acceptance criteria, dependencies, and effort estimates. | dep: Alembic, SQLAlchemy, FastAPI, Pydantic, pytest, SQLite/PostgreSQL, AsyncSession, UUIDPrimaryKeyMixin, UserConfig, lifecycle_hooks, health_monitor, InstanceEventBus +## arch +Document-driven development using phased TDD with stacked PRs (backend core → backend integration → frontend core → toast coordination), OpenAPI-first API design, FastAPI/SQLAlchemy backend with React frontend, and event-driven toast coordination with user-scoped persistent storage replacing ephemeral SSE notifications. +## tags +notification, react, center, apply, fastapi, sqlalchemy, alembic, user +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/persistent-terminal-sessions/.pi-map.index.md b/openspec/changes/persistent-terminal-sessions/.pi-map.index.md new file mode 100644 index 0000000..13fb85c --- /dev/null +++ b/openspec/changes/persistent-terminal-sessions/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/persistent-terminal-sessions (index) +dir: openspec/changes/persistent-terminal-sessions + +## role +Defines requirements and architecture for persistent WebSocket terminal sessions that maintain shell state across reconnections without spawning new docker exec processes. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- openspec/changes/persistent-terminal-sessions/specs + index: openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md + map: openspec/changes/persistent-terminal-sessions/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/persistent-terminal-sessions/.pi-map.index.md +map: openspec/changes/persistent-terminal-sessions/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/persistent-terminal-sessions/.pi-map.md b/openspec/changes/persistent-terminal-sessions/.pi-map.md new file mode 100644 index 0000000..59f1764 --- /dev/null +++ b/openspec/changes/persistent-terminal-sessions/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/persistent-terminal-sessions +dir: openspec/changes/persistent-terminal-sessions + +index: openspec/changes/persistent-terminal-sessions/.pi-map.index.md + +## role +Defines requirements and architecture for persistent WebSocket terminal sessions that maintain shell state across reconnections without spawning new docker exec processes. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema version and creation date metadata +- design.md | Design document for implementing persistent terminal sessions that survive WebSocket disconnections while maintaining shell state and allowing reconnection to the same docker exec process. | dep: TerminalManager, TerminalSession, WebSocket, docker exec, PTY +- proposal.md | Proposes architectural changes to make WebSocket terminal sessions persistent across reconnections instead of spawning new docker exec processes each time | dep: docker exec, WebSocket, TerminalManager, terminal_session.py, terminal.tsx, use-terminal.ts +- tasks.md | This file is a project task list tracking the implementation of persistent terminal sessions with WebSocket reconnection, reset functionality, and idle timeout management across backend and frontend components. | dep: TerminalSession, TerminalManager, WebSocket, docker exec, API endpoints, frontend terminal component, terminal hook +## arch +Specification-driven design using OpenSpec schema with phased implementation (backend session state management, frontend reconnection logic, idle timeout handling) documented across design/proposal/task files. +## tags +websocket, terminal, design, persistent, sessions, terminalmanager, docker exec, .openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md b/openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md new file mode 100644 index 0000000..44a25ca --- /dev/null +++ b/openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/persistent-terminal-sessions/specs (index) +dir: openspec/changes/persistent-terminal-sessions/specs + +## role +Defines OpenAPI specifications for persistent terminal sessions feature +## parent +index: openspec/changes/persistent-terminal-sessions/.pi-map.index.md +map: openspec/changes/persistent-terminal-sessions/.pi-map.md +## children +- openspec/changes/persistent-terminal-sessions/specs/persistent-terminal + index: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md + map: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.md +## files +## links +index: openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md +map: openspec/changes/persistent-terminal-sessions/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/persistent-terminal-sessions/specs/.pi-map.md b/openspec/changes/persistent-terminal-sessions/specs/.pi-map.md new file mode 100644 index 0000000..f408170 --- /dev/null +++ b/openspec/changes/persistent-terminal-sessions/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/persistent-terminal-sessions/specs +dir: openspec/changes/persistent-terminal-sessions/specs + +index: openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md + +## role +Defines OpenAPI specifications for persistent terminal sessions feature +## files +## arch +API-first design using OpenAPI/Swagger spec files to define REST endpoints before implementation +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md b/openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md new file mode 100644 index 0000000..2322d4a --- /dev/null +++ b/openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/persistent-terminal-sessions/specs/persistent-terminal (index) +dir: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal + +## role +Defines requirements for persistent WebSocket terminal sessions with reconnection, output buffering, reset, and idle timeout capabilities +## parent +index: openspec/changes/persistent-terminal-sessions/specs/.pi-map.index.md +map: openspec/changes/persistent-terminal-sessions/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md +map: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.md b/openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.md new file mode 100644 index 0000000..cbe67df --- /dev/null +++ b/openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/persistent-terminal-sessions/specs/persistent-terminal +dir: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal + +index: openspec/changes/persistent-terminal-sessions/specs/persistent-terminal/.pi-map.index.md + +## role +Defines requirements for persistent WebSocket terminal sessions with reconnection, output buffering, reset, and idle timeout capabilities +## files +- spec.md | Defines requirements for persistent WebSocket terminal sessions with reconnection, output buffering, reset, and idle timeout capabilities +## arch +Specification-driven design using markdown-based requirements documentation for a terminal session persistence feature +## tags +spec, defines, requirements, persistent, websocket, terminal, sessions, reconnection +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/reorganize-long-files/.pi-map.index.md b/openspec/changes/reorganize-long-files/.pi-map.index.md new file mode 100644 index 0000000..970ff37 --- /dev/null +++ b/openspec/changes/reorganize-long-files/.pi-map.index.md @@ -0,0 +1,22 @@ +# openspec/changes/reorganize-long-files (index) +dir: openspec/changes/reorganize-long-files + +## role +Defines and tracks a structural refactoring initiative to decompose monolithic frontend pages and backend routers into modular, maintainable components. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +- proposal.md +- spec.md +- tasks.md +## links +index: openspec/changes/reorganize-long-files/.pi-map.index.md +map: openspec/changes/reorganize-long-files/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/reorganize-long-files/.pi-map.md b/openspec/changes/reorganize-long-files/.pi-map.md new file mode 100644 index 0000000..5de8426 --- /dev/null +++ b/openspec/changes/reorganize-long-files/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/reorganize-long-files +dir: openspec/changes/reorganize-long-files + +index: openspec/changes/reorganize-long-files/.pi-map.index.md + +## role +Defines and tracks a structural refactoring initiative to decompose monolithic frontend pages and backend routers into modular, maintainable components. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema type and creation date metadata +- proposal.md | Proposes a structural refactoring to split monolithic frontend pages and backend routers into thinner orchestrators with extracted components/services, restoring a thin-page/thin-router/fat-component pattern. | dep: React components, FastAPI routers, WebSocket, Docker, git services +- spec.md | A specification document defining a pure structural refactoring to split monolithic frontend pages/backend routers and CSS into smaller, focused components and services without changing any behavior or API contracts. | dep: React, CSS Modules, WebSocket, FastAPI/Flask routers, TypeScript, Vite +- tasks.md | A phased task list for refactoring a full-stack application by extracting monolithic backend routers and frontend pages/components into modular structures, plus reorganizing CSS into a maintainable architecture. | dep: FastAPI, React, TypeScript, Vite, CSS Modules, WebSocket, py_compile, tsc, npm +## arch +Documentation-driven specification pattern using phased task breakdown with OpenSpec metadata tracking, enforcing a thin-page/thin-router/fat-component architecture while preserving zero behavioral changes. +## tags +refactoring, monolithic, frontend, pages, backend, routers, components, websocket +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/session-list-overhaul/.pi-map.index.md b/openspec/changes/session-list-overhaul/.pi-map.index.md new file mode 100644 index 0000000..85432a7 --- /dev/null +++ b/openspec/changes/session-list-overhaul/.pi-map.index.md @@ -0,0 +1,24 @@ +# openspec/changes/session-list-overhaul (index) +dir: openspec/changes/session-list-overhaul + +## role +Frontend refactoring specification for unifying duplicated session list rendering logic across dashboard and sessions pages into reusable components. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- openspec/changes/session-list-overhaul/specs + index: openspec/changes/session-list-overhaul/specs/.pi-map.index.md + map: openspec/changes/session-list-overhaul/specs/.pi-map.md +## files +- .openspec.yaml +- design.md +- proposal.md +- tasks.md +## links +index: openspec/changes/session-list-overhaul/.pi-map.index.md +map: openspec/changes/session-list-overhaul/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/session-list-overhaul/.pi-map.md b/openspec/changes/session-list-overhaul/.pi-map.md new file mode 100644 index 0000000..547758f --- /dev/null +++ b/openspec/changes/session-list-overhaul/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/session-list-overhaul +dir: openspec/changes/session-list-overhaul + +index: openspec/changes/session-list-overhaul/.pi-map.index.md + +## role +Frontend refactoring specification for unifying duplicated session list rendering logic across dashboard and sessions pages into reusable components. +## files +- .openspec.yaml | Defines an OpenSpec configuration file with schema version and creation date metadata +- design.md | Design document for refactoring duplicated session list rendering logic into unified reusable components across dashboard and sessions pages. | dep: dashboard.tsx, sessions.tsx, SessionCard, SessionList +- proposal.md | Proposes a frontend refactoring to unify session list UI components across dashboard and sessions pages | dep: React components, CSS styling, dashboard.tsx, sessions.tsx +- tasks.md | Task tracking checklist for refactoring session UI components in a web application dashboard +## arch +Specification-driven development using OpenSpec schema with design-proposal-task workflow pattern, documenting UI component consolidation through progressive refinement from design docs to implementation checklists. +## tags +dashboard, sessions, tsx, design, refactoring, session, components, .openspec +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/session-list-overhaul/specs/.pi-map.index.md b/openspec/changes/session-list-overhaul/specs/.pi-map.index.md new file mode 100644 index 0000000..dbf8cee --- /dev/null +++ b/openspec/changes/session-list-overhaul/specs/.pi-map.index.md @@ -0,0 +1,20 @@ +# openspec/changes/session-list-overhaul/specs (index) +dir: openspec/changes/session-list-overhaul/specs + +## role +Contains specification documents for redesigning the session list user interface and functionality. +## parent +index: openspec/changes/session-list-overhaul/.pi-map.index.md +map: openspec/changes/session-list-overhaul/.pi-map.md +## children +- openspec/changes/session-list-overhaul/specs/session-list-ui + index: openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md + map: openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.md +## files +## links +index: openspec/changes/session-list-overhaul/specs/.pi-map.index.md +map: openspec/changes/session-list-overhaul/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/session-list-overhaul/specs/.pi-map.md b/openspec/changes/session-list-overhaul/specs/.pi-map.md new file mode 100644 index 0000000..0ce86e8 --- /dev/null +++ b/openspec/changes/session-list-overhaul/specs/.pi-map.md @@ -0,0 +1,18 @@ +# openspec/changes/session-list-overhaul/specs +dir: openspec/changes/session-list-overhaul/specs + +index: openspec/changes/session-list-overhaul/specs/.pi-map.index.md + +## role +Contains specification documents for redesigning the session list user interface and functionality. +## files +## arch +Specification-driven design using structured requirement documents to define UI/UX changes before implementation. +## tags +- +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md b/openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md new file mode 100644 index 0000000..410db19 --- /dev/null +++ b/openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/session-list-overhaul/specs/session-list-ui (index) +dir: openspec/changes/session-list-overhaul/specs/session-list-ui + +## role +Defines UI specifications for unified session card components with grouping, filtering, and control actions across dashboard and sessions pages. +## parent +index: openspec/changes/session-list-overhaul/specs/.pi-map.index.md +map: openspec/changes/session-list-overhaul/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md +map: openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.md b/openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.md new file mode 100644 index 0000000..07a23ac --- /dev/null +++ b/openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/session-list-overhaul/specs/session-list-ui +dir: openspec/changes/session-list-overhaul/specs/session-list-ui + +index: openspec/changes/session-list-overhaul/specs/session-list-ui/.pi-map.index.md + +## role +Defines UI specifications for unified session card components with grouping, filtering, and control actions across dashboard and sessions pages. +## files +- spec.md | Specifies UI requirements for session card display, control actions, list grouping/filtering, and component unification across dashboard and sessions pages. +## arch +Specification-driven design using markdown-based requirements documents to standardize component behavior across multiple page contexts. +## tags +spec, specifies, requirements, session, card, display, control, actions +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/ssh-key-mounting/.pi-map.index.md b/openspec/changes/ssh-key-mounting/.pi-map.index.md new file mode 100644 index 0000000..3ab7655 --- /dev/null +++ b/openspec/changes/ssh-key-mounting/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/ssh-key-mounting (index) +dir: openspec/changes/ssh-key-mounting + +## role +Defines requirements specification for mounting SSH keys into tool instances to enable secure authentication with external services. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +## links +index: openspec/changes/ssh-key-mounting/.pi-map.index.md +map: openspec/changes/ssh-key-mounting/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/ssh-key-mounting/.pi-map.md b/openspec/changes/ssh-key-mounting/.pi-map.md new file mode 100644 index 0000000..7c96cdb --- /dev/null +++ b/openspec/changes/ssh-key-mounting/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/ssh-key-mounting +dir: openspec/changes/ssh-key-mounting + +index: openspec/changes/ssh-key-mounting/.pi-map.index.md + +## role +Defines requirements specification for mounting SSH keys into tool instances to enable secure authentication with external services. +## files +- .openspec.yaml | Specification document defining requirements for SSH key mounting feature in tool instances +## arch +Declarative specification pattern using YAML-based OpenSpec format to document feature requirements separately from implementation. +## tags +.openspec, specification, document, defining, requirements, ssh, key, mounting +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md b/openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md new file mode 100644 index 0000000..bf8881c --- /dev/null +++ b/openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/changes/terminal-fullscreen-unified-header (index) +dir: openspec/changes/terminal-fullscreen-unified-header + +## role +Contains a completed specification document for a bugfix that unifies header elements in terminal fullscreen mode. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- .openspec.yaml +## links +index: openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md +map: openspec/changes/terminal-fullscreen-unified-header/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/terminal-fullscreen-unified-header/.pi-map.md b/openspec/changes/terminal-fullscreen-unified-header/.pi-map.md new file mode 100644 index 0000000..dc0aded --- /dev/null +++ b/openspec/changes/terminal-fullscreen-unified-header/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/changes/terminal-fullscreen-unified-header +dir: openspec/changes/terminal-fullscreen-unified-header + +index: openspec/changes/terminal-fullscreen-unified-header/.pi-map.index.md + +## role +Contains a completed specification document for a bugfix that unifies header elements in terminal fullscreen mode. +## files +- .openspec.yaml | Defines a completed bugfix specification for unifying terminal fullscreen mode header elements +## arch +Specification-driven change management using YAML-based OpenSpec format for tracking bugfixes and UI consistency improvements. +## tags +.openspec, defines, completed, bugfix, specification, unifying, terminal, fullscreen +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/working-copies/.pi-map.index.md b/openspec/changes/working-copies/.pi-map.index.md new file mode 100644 index 0000000..cb24026 --- /dev/null +++ b/openspec/changes/working-copies/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/changes/working-copies (index) +dir: openspec/changes/working-copies + +## role +Defines a workspace-based architecture to replace direct repository mounting/cloning with persistent, shareable git working copies for tool instances. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- design.md +- explore.md +- proposal.md +- spec.md +- tasks.md +## links +index: openspec/changes/working-copies/.pi-map.index.md +map: openspec/changes/working-copies/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/working-copies/.pi-map.md b/openspec/changes/working-copies/.pi-map.md new file mode 100644 index 0000000..e54dde8 --- /dev/null +++ b/openspec/changes/working-copies/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/changes/working-copies +dir: openspec/changes/working-copies + +index: openspec/changes/working-copies/.pi-map.index.md + +## role +Defines a workspace-based architecture to replace direct repository mounting/cloning with persistent, shareable git working copies for tool instances. +## files +- design.md | Design document for implementing workspace-based tool instances that replace direct repository mounting with isolated git working copies | dep: FastAPI, SQLAlchemy, Alembic, Docker Compose, Git, React/TypeScript, asyncio subprocess +- explore.md | Design document proposing "Working Copies" (named "Workspace") as persistent writable clones of repositories to replace direct repo mounting/cloning in tool instances | dep: GitRepository, ToolInstance, Project, User, database, compose generation, filesystem mount system +- proposal.md | Proposes a new "Workspace" entity to replace the confusing mount/clone mode dichotomy for tool instances, enabling persistent writable repository clones that multiple tools can share. +- spec.md | Technical specification for implementing persistent workspace-based tool instances that replace mount/clone modes with explicit Git repository workspaces | dep: Git, PostgreSQL, REST API, React/TypeScript frontend, Docker containers, Python backend +- tasks.md | A project task breakdown document defining a phased implementation plan for adding workspace-based tool instances to a full-stack application, including backend foundation, backend integration, frontend core, and frontend integration PRs with detailed tasks, acceptance criteria, and verification steps. | dep: Alembic, FastAPI, SQLAlchemy, React, TypeScript, Git, Docker Compose, pytest, ruff, ESLint, npm +## arch +Design-driven development with layered specification documents (exploration → proposal → design → spec → tasks) transitioning from conceptual "Workspace" entity to phased full-stack implementation across backend and frontend. +## tags +workspace, tool, instances, git, design, replace, document, repository +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/changes/workspace-first-ui/.pi-map.index.md b/openspec/changes/workspace-first-ui/.pi-map.index.md new file mode 100644 index 0000000..ee6df37 --- /dev/null +++ b/openspec/changes/workspace-first-ui/.pi-map.index.md @@ -0,0 +1,22 @@ +# openspec/changes/workspace-first-ui (index) +dir: openspec/changes/workspace-first-ui + +## role +Design and planning documents for a workspace-first UI refresh that restructures the application around persistent writable workspaces rather than direct repository browsing. +## parent +index: openspec/changes/.pi-map.index.md +map: openspec/changes/.pi-map.md +## children +- +## files +- design.md +- proposal.md +- spec.md +- tasks.md +## links +index: openspec/changes/workspace-first-ui/.pi-map.index.md +map: openspec/changes/workspace-first-ui/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/changes/workspace-first-ui/.pi-map.md b/openspec/changes/workspace-first-ui/.pi-map.md new file mode 100644 index 0000000..012a225 --- /dev/null +++ b/openspec/changes/workspace-first-ui/.pi-map.md @@ -0,0 +1,22 @@ +# openspec/changes/workspace-first-ui +dir: openspec/changes/workspace-first-ui + +index: openspec/changes/workspace-first-ui/.pi-map.index.md + +## role +Design and planning documents for a workspace-first UI refresh that restructures the application around persistent writable workspaces rather than direct repository browsing. +## files +- design.md | Design document for a workspace-first UI refresh, detailing backend API/services and frontend components for file management, git operations, and tool instances scoped to workspaces. | dep: FastAPI, SQLAlchemy/AsyncSession, React, React Router, asyncio, subprocess, os +- proposal.md | Proposes a UI refresh to replace the old repository workspace with a workspace-first navigation model centered around persistent writable clones. +- spec.md | Product specification document defining a workspace-first UI refresh that replaces direct repository file browsing with workspace-centric navigation, new routes, and redesigned pages for projects and workspace details. | dep: React/Next.js (implied by .tsx, routing), REST API backend, database (existing workspaces table), TypeScript, ruff, eslint +- tasks.md | A task planning document that breaks down a "Workspace-First UI Refresh" project into three sequential PRs with detailed backend/frontend tasks, acceptance criteria, and verification steps. | dep: FastAPI, React, TypeScript, pytest, ruff, eslint, tsc, git, workspace-files API, workspace-git API, workspace-instances API +## arch +Specification-driven development with phased PR-based delivery (backend API/services first, then frontend routes/pages, then polish), separating product requirements (spec.md), technical design (design.md), project proposal (proposal.md), and implementation tasks (tasks.md). +## tags +workspace, first, refresh, design, document, react, tasks, backend +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/designs/.pi-map.index.md b/openspec/designs/.pi-map.index.md new file mode 100644 index 0000000..a7d5b7f --- /dev/null +++ b/openspec/designs/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/designs (index) +dir: openspec/designs + +## role +Contains design documents specifying architectural decisions and feature specifications for the OpenSpec containerized development environment platform. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- +## files +- config-profile-multi-repo-mounts.md +- home-path-expansion.md +- mount-specificity-ordering.md +- terminal-responsiveness.md +- tool-definition-manifest.md +## links +index: openspec/designs/.pi-map.index.md +map: openspec/designs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/designs/.pi-map.md b/openspec/designs/.pi-map.md new file mode 100644 index 0000000..39d4102 --- /dev/null +++ b/openspec/designs/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/designs +dir: openspec/designs + +index: openspec/designs/.pi-map.index.md + +## role +Contains design documents specifying architectural decisions and feature specifications for the OpenSpec containerized development environment platform. +## files +- config-profile-multi-repo-mounts.md | Design document for extending git mount configuration to support multiple source-to-target mappings per repository in a config profile system. | dep: JSONB, Python, TypeScript, React, os.path, glob expansion, config profile API, tool instances API +- home-path-expansion.md | Design document for implementing `~` and `$HOME` expansion in container mount paths based on manifest user configuration | dep: config_profile_resolver.py, manifest_compiler.py, tool_instances.py, os +- mount-specificity-ordering.md | Defines a design for sorting Docker volume mounts by target path depth to ensure more specific mounts take precedence, with duplicate detection warnings. | dep: docker.py, manifest_compiler.py, tool_instances.py, collections.Counter, logging +- terminal-responsiveness.md | Design document for a high-performance web terminal rewrite using asyncio-native I/O, binary WebSocket frames, output batching, flow control, and WebGL rendering. | dep: asyncio, pty, os, time, collections.deque, xterm.js, xterm-addon-webgl, WebSocket, docker, JSON +- tool-definition-manifest.md | Defines a system for creating, validating, and compiling tool definition manifests into Dockerfiles, Docker Compose files, and entrypoint scripts for containerized development environments. | dep: Docker, PostgreSQL, Python (json, hashlib, shlex, yaml, subprocess), JSON Schema, deb/nodesource package repositories +## arch +Markdown-based design document collection using iterative specification pattern; each document follows a structured RFC-style format with problem statement, design, and implementation considerations covering container orchestration, filesystem mounts, terminal I/O, and tool manifest compilation. +## tags +py, docker, design, mount, path, mounts, document, config +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/docs/.pi-map.index.md b/openspec/docs/.pi-map.index.md new file mode 100644 index 0000000..a046844 --- /dev/null +++ b/openspec/docs/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/docs (index) +dir: openspec/docs + +## role +End-user documentation for the platform's tool type definition and management capabilities, covering both legacy container-based and modern declarative manifest approaches. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- +## files +- tool-workshop-guide.md +## links +index: openspec/docs/.pi-map.index.md +map: openspec/docs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/docs/.pi-map.md b/openspec/docs/.pi-map.md new file mode 100644 index 0000000..abb08c4 --- /dev/null +++ b/openspec/docs/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/docs +dir: openspec/docs + +index: openspec/docs/.pi-map.index.md + +## role +End-user documentation for the platform's tool type definition and management capabilities, covering both legacy container-based and modern declarative manifest approaches. +## files +- tool-workshop-guide.md | User guide for defining and managing container-based tool types in a platform called Headquarter using legacy (Compose/Dockerfile) or recommended declarative manifest approaches. | dep: Docker, Docker Compose, JSON, apt, npm, pip, Node.js, git, ssh +## arch +Static markdown documentation with no code architecture; follows a tutorial/guide pattern with progressive disclosure from legacy Docker/Compose workflows to recommended declarative manifest specifications. +## tags +guide, tool, workshop, user, defining, managing, container, types +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/explorations/.pi-map.index.md b/openspec/explorations/.pi-map.index.md new file mode 100644 index 0000000..ec3cda4 --- /dev/null +++ b/openspec/explorations/.pi-map.index.md @@ -0,0 +1,25 @@ +# openspec/explorations (index) +dir: openspec/explorations + +## role +Design exploration and technical specification documents for container instance management system features and architectural improvements. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- +## files +- config-profile-multi-repo-mounts.md +- home-path-expansion.md +- mount-file-level-overlays.md +- mount-specificity-ordering.md +- ssh-key-mounting.md +- streamline-tool-container-definitions.md +- terminal-responsiveness.md +## links +index: openspec/explorations/.pi-map.index.md +map: openspec/explorations/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/explorations/.pi-map.md b/openspec/explorations/.pi-map.md new file mode 100644 index 0000000..0fdb858 --- /dev/null +++ b/openspec/explorations/.pi-map.md @@ -0,0 +1,25 @@ +# openspec/explorations +dir: openspec/explorations + +index: openspec/explorations/.pi-map.index.md + +## role +Design exploration and technical specification documents for container instance management system features and architectural improvements. +## files +- config-profile-multi-repo-mounts.md | Proposes a design for supporting multiple directory mounts from a single git repository clone in config profiles, avoiding redundant clones. +- home-path-expansion.md | Explores design options for expanding `~` and `$HOME` in container mount paths based on target container user context | dep: config_profile_resolver.py, tool_instances.py, manifest_compiler.py, Docker Compose +- mount-file-level-overlays.md | Explains a bug where directory-level bind mounts hide sibling files and proposes file-level bind mounts as the solution for overlaying individual files without affecting their parent directories. | dep: Docker, os +- mount-specificity-ordering.md | Design document proposing a solution to fix Docker mount ordering where broader parent-path mounts hide more specific child-path mounts by sorting volumes by target path depth | dep: Docker Compose, Linux mount system, manifest_compiler.py, tool_instances.py +- ssh-key-mounting.md | Design document for adding SSH key mounting capability to config profiles in a container instance management system | dep: ssh_keys table, GitRepository, ConfigProfile, compose volume mounts, alembic migrations, React frontend +- streamline-tool-container-definitions.md | Explores architectural redesign of a tool container definition system to replace monolithic Dockerfile strings and ad-hoc compose generation with a layered, declarative approach | dep: Docker, Docker Compose, SQLAlchemy, Python f-strings/Jinja, Ubuntu base images, Cloudflare tunnels, PTY/WebSocket terminals +- terminal-responsiveness.md | Explores architectural improvements to achieve low-latency terminal I/O performance comparable to VS Code Server by identifying bottlenecks and proposing optimizations for a WebSocket-based web terminal. | dep: xterm.js, WebSocket, asyncio, select, docker, Python, TypeScript, React, node-pty, libuv, Docker Engine API +## arch +Markdown-based design documents following an exploratory RFC pattern, covering mount resolution algorithms, path expansion strategies, container definition layering, and WebSocket optimization techniques. +## tags +mounts, container, mount, py, path, design, config, level +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/proposals/.pi-map.index.md b/openspec/proposals/.pi-map.index.md new file mode 100644 index 0000000..3183c69 --- /dev/null +++ b/openspec/proposals/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/proposals (index) +dir: openspec/proposals + +## role +Contains architectural design proposals for extending and improving the OpenSpec project's container tooling, configuration, and terminal performance capabilities. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- +## files +- config-profile-multi-repo-mounts.md +- home-path-expansion.md +- mount-specificity-ordering.md +- streamline-tool-container-definitions.md +- terminal-responsiveness.md +## links +index: openspec/proposals/.pi-map.index.md +map: openspec/proposals/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/proposals/.pi-map.md b/openspec/proposals/.pi-map.md new file mode 100644 index 0000000..702ab1a --- /dev/null +++ b/openspec/proposals/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/proposals +dir: openspec/proposals + +index: openspec/proposals/.pi-map.index.md + +## role +Contains architectural design proposals for extending and improving the OpenSpec project's container tooling, configuration, and terminal performance capabilities. +## files +- config-profile-multi-repo-mounts.md | Proposes a backward-compatible extension to Config Profiles' git_mounts to support multiple source/target mappings per repository clone, enabling efficient monorepo directory mounting. +- home-path-expansion.md | Proposes expanding `~` and `$HOME` in container mount target paths to the appropriate home directory based on tool manifest user configuration during Docker Compose generation. | dep: Docker Compose, tool manifest, Dockerfile generation, git mounts +- mount-specificity-ordering.md | Proposes sorting Docker Compose volume mounts by target path depth to prevent broader mounts from hiding more specific ones | dep: Docker Compose, manifest_compiler.py, tool_instances.py +- streamline-tool-container-definitions.md | Proposes a declarative YAML manifest system to replace hand-written Dockerfiles and Compose files for defining tool containers, with automatic compilation into Docker/Compose artifacts and compatibility with existing ConfigProfile mounts. | dep: Docker, Docker Compose, YAML/JSON parsing, database (PostgreSQL implied by JSONB), Python (implied by syntax examples), Node.js/npm, apt, git +- terminal-responsiveness.md | Proposes architectural improvements to reduce web terminal latency and increase rendering performance through asyncio I/O, WebGL rendering, and WebSocket optimizations. | dep: docker, asyncio, WebSocket, WebGL, PTY, Docker Engine API +## arch +Markdown-based RFC/proposal pattern using individual specification documents for distinct feature proposals, covering Docker Compose generation, volume mounting semantics, YAML-driven declarative container definitions, and async I/O/WebSocket optimizations. +## tags +mounts, proposes, docker, home, tool, compose, config, target +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/.pi-map.index.md b/openspec/specs/.pi-map.index.md new file mode 100644 index 0000000..a893ca8 --- /dev/null +++ b/openspec/specs/.pi-map.index.md @@ -0,0 +1,124 @@ +# openspec/specs (index) +dir: openspec/specs + +## role +Contains formal specification documents defining requirements, APIs, algorithms, and test strategies for core platform features across configuration management, container orchestration, terminal I/O, and tool definition systems. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- openspec/specs/api-documentation + index: openspec/specs/api-documentation/.pi-map.index.md + map: openspec/specs/api-documentation/.pi-map.md +- openspec/specs/auth-oauth + index: openspec/specs/auth-oauth/.pi-map.index.md + map: openspec/specs/auth-oauth/.pi-map.md +- openspec/specs/database-models + index: openspec/specs/database-models/.pi-map.index.md + map: openspec/specs/database-models/.pi-map.md +- openspec/specs/docker-infrastructure + index: openspec/specs/docker-infrastructure/.pi-map.index.md + map: openspec/specs/docker-infrastructure/.pi-map.md +- openspec/specs/frontend-foundation + index: openspec/specs/frontend-foundation/.pi-map.index.md + map: openspec/specs/frontend-foundation/.pi-map.md +- openspec/specs/git-repo + index: openspec/specs/git-repo/.pi-map.index.md + map: openspec/specs/git-repo/.pi-map.md +- openspec/specs/instance-proxy + index: openspec/specs/instance-proxy/.pi-map.index.md + map: openspec/specs/instance-proxy/.pi-map.md +- openspec/specs/instance-runtime-health + index: openspec/specs/instance-runtime-health/.pi-map.index.md + map: openspec/specs/instance-runtime-health/.pi-map.md +- openspec/specs/instance-startup-health + index: openspec/specs/instance-startup-health/.pi-map.index.md + map: openspec/specs/instance-startup-health/.pi-map.md +- openspec/specs/mobile-list-detail + index: openspec/specs/mobile-list-detail/.pi-map.index.md + map: openspec/specs/mobile-list-detail/.pi-map.md +- openspec/specs/mobile-navigation + index: openspec/specs/mobile-navigation/.pi-map.index.md + map: openspec/specs/mobile-navigation/.pi-map.md +- openspec/specs/mobile-repo-workspace + index: openspec/specs/mobile-repo-workspace/.pi-map.index.md + map: openspec/specs/mobile-repo-workspace/.pi-map.md +- openspec/specs/mobile-tools-navigation + index: openspec/specs/mobile-tools-navigation/.pi-map.index.md + map: openspec/specs/mobile-tools-navigation/.pi-map.md +- openspec/specs/opencode-web-server + index: openspec/specs/opencode-web-server/.pi-map.index.md + map: openspec/specs/opencode-web-server/.pi-map.md +- openspec/specs/project-management + index: openspec/specs/project-management/.pi-map.index.md + map: openspec/specs/project-management/.pi-map.md +- openspec/specs/readiness-probe-integration + index: openspec/specs/readiness-probe-integration/.pi-map.index.md + map: openspec/specs/readiness-probe-integration/.pi-map.md +- openspec/specs/repo-clone-mode + index: openspec/specs/repo-clone-mode/.pi-map.index.md + map: openspec/specs/repo-clone-mode/.pi-map.md +- openspec/specs/session-lifecycle-ux + index: openspec/specs/session-lifecycle-ux/.pi-map.index.md + map: openspec/specs/session-lifecycle-ux/.pi-map.md +- openspec/specs/sessions-hub + index: openspec/specs/sessions-hub/.pi-map.index.md + map: openspec/specs/sessions-hub/.pi-map.md +- openspec/specs/smart-tunnel-recovery + index: openspec/specs/smart-tunnel-recovery/.pi-map.index.md + map: openspec/specs/smart-tunnel-recovery/.pi-map.md +- openspec/specs/ssh-keys + index: openspec/specs/ssh-keys/.pi-map.index.md + map: openspec/specs/ssh-keys/.pi-map.md +- openspec/specs/tool-config-management + index: openspec/specs/tool-config-management/.pi-map.index.md + map: openspec/specs/tool-config-management/.pi-map.md +- openspec/specs/tool-instances + index: openspec/specs/tool-instances/.pi-map.index.md + map: openspec/specs/tool-instances/.pi-map.md +- openspec/specs/tool-port-configuration + index: openspec/specs/tool-port-configuration/.pi-map.index.md + map: openspec/specs/tool-port-configuration/.pi-map.md +- openspec/specs/tool-terminal + index: openspec/specs/tool-terminal/.pi-map.index.md + map: openspec/specs/tool-terminal/.pi-map.md +- openspec/specs/tool-terminal-startup-command + index: openspec/specs/tool-terminal-startup-command/.pi-map.index.md + map: openspec/specs/tool-terminal-startup-command/.pi-map.md +- openspec/specs/tool-type-port-visibility + index: openspec/specs/tool-type-port-visibility/.pi-map.index.md + map: openspec/specs/tool-type-port-visibility/.pi-map.md +- openspec/specs/tool-type-single-interface + index: openspec/specs/tool-type-single-interface/.pi-map.index.md + map: openspec/specs/tool-type-single-interface/.pi-map.md +- openspec/specs/tool-types + index: openspec/specs/tool-types/.pi-map.index.md + map: openspec/specs/tool-types/.pi-map.md +- openspec/specs/tool-types-definition + index: openspec/specs/tool-types-definition/.pi-map.index.md + map: openspec/specs/tool-types-definition/.pi-map.md +- openspec/specs/traefik-deployment + index: openspec/specs/traefik-deployment/.pi-map.index.md + map: openspec/specs/traefik-deployment/.pi-map.md +- openspec/specs/tunnel-health-monitoring + index: openspec/specs/tunnel-health-monitoring/.pi-map.index.md + map: openspec/specs/tunnel-health-monitoring/.pi-map.md +- openspec/specs/user-config + index: openspec/specs/user-config/.pi-map.index.md + map: openspec/specs/user-config/.pi-map.md +- openspec/specs/user-profile + index: openspec/specs/user-profile/.pi-map.index.md + map: openspec/specs/user-profile/.pi-map.md +## files +- config-profile-multi-repo-mounts.md +- home-path-expansion.md +- mount-specificity-ordering.md +- terminal-responsiveness.md +- tool-definition-manifest.md +## links +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/.pi-map.md b/openspec/specs/.pi-map.md new file mode 100644 index 0000000..2bd41cb --- /dev/null +++ b/openspec/specs/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/specs +dir: openspec/specs + +index: openspec/specs/.pi-map.index.md + +## role +Contains formal specification documents defining requirements, APIs, algorithms, and test strategies for core platform features across configuration management, container orchestration, terminal I/O, and tool definition systems. +## files +- config-profile-multi-repo-mounts.md | Specifies requirements, API contracts, and test strategy for supporting multiple directory mappings per git repository mount in configuration profiles +- home-path-expansion.md | Specifies requirements for expanding `~` and `$HOME` in container mount paths during Docker compose generation based on manifest user configuration. +- mount-specificity-ordering.md | Specifies requirements and algorithm for sorting Docker volume mounts by target path depth to ensure parent mounts are applied before child mounts | dep: manifest_compiler.py, tool_instances.py, logging +- terminal-responsiveness.md | Specification document for a high-performance web terminal I/O pipeline rewrite targeting sub-frame latency with event-driven PTY reading, output batching, flow control, and WebGL rendering. | dep: asyncio, pty, docker, WebSocket, xterm.js, WebGL, TypeScript, Python +- tool-definition-manifest.md | Specifies a declarative manifest system for defining tool containers without Dockerfiles, including compilation to Docker/Compose, versioning, permission policies, and backward compatibility. | dep: Docker, Docker Compose, JSON Schema, database (PostgreSQL with JSONB), Alembic, Python/FastAPI (implied by paths) +## arch +Specification-driven development pattern using Markdown-based RFCs/ADRs that separate design documentation from implementation, covering behavioral contracts, edge cases, and verification strategies before coding. +## tags +mounts, docker, specifies, mount, manifest, requirements, home, path +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/api-documentation/.pi-map.index.md b/openspec/specs/api-documentation/.pi-map.index.md new file mode 100644 index 0000000..b218f8a --- /dev/null +++ b/openspec/specs/api-documentation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/api-documentation (index) +dir: openspec/specs/api-documentation + +## role +Defines OpenAPI specification, health monitoring, and developer onboarding requirements for the FastAPI-based system. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/api-documentation/.pi-map.index.md +map: openspec/specs/api-documentation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/api-documentation/.pi-map.md b/openspec/specs/api-documentation/.pi-map.md new file mode 100644 index 0000000..2292a35 --- /dev/null +++ b/openspec/specs/api-documentation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/api-documentation +dir: openspec/specs/api-documentation + +index: openspec/specs/api-documentation/.pi-map.index.md + +## role +Defines OpenAPI specification, health monitoring, and developer onboarding requirements for the FastAPI-based system. +## files +- spec.md | Define API documentation, health monitoring, and developer onboarding requirements for a FastAPI-based system. | dep: FastAPI, Pydantic v2, Swagger UI, Database, Redis +## arch +Specification-driven documentation using Markdown-based requirements with FastAPI-native patterns (OpenAPI, health endpoints, auto-generated docs). +## tags +fastapi, spec, define, api, documentation, health, monitoring, developer +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/auth-oauth/.pi-map.index.md b/openspec/specs/auth-oauth/.pi-map.index.md new file mode 100644 index 0000000..ec9ee21 --- /dev/null +++ b/openspec/specs/auth-oauth/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/auth-oauth (index) +dir: openspec/specs/auth-oauth + +## role +Defines authentication and authorization requirements for OAuth2/OIDC integration with Authentik identity provider +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/auth-oauth/.pi-map.index.md +map: openspec/specs/auth-oauth/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/auth-oauth/.pi-map.md b/openspec/specs/auth-oauth/.pi-map.md new file mode 100644 index 0000000..77cc3eb --- /dev/null +++ b/openspec/specs/auth-oauth/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/auth-oauth +dir: openspec/specs/auth-oauth + +index: openspec/specs/auth-oauth/.pi-map.index.md + +## role +Defines authentication and authorization requirements for OAuth2/OIDC integration with Authentik identity provider +## files +- spec.md | Specifies OAuth2/OIDC authentication requirements using Authentik with secure session handling, token refresh, and logout functionality | dep: Authentik OIDC provider, Database (User model), pytest, mypy, ruff +## arch +Specification-driven contract using markdown-based OpenAPI-style documentation for security requirements, session lifecycle, and token management patterns +## tags +spec, specifies, oauth2, oidc, authentication, requirements, authentik, secure +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/database-models/.pi-map.index.md b/openspec/specs/database-models/.pi-map.index.md new file mode 100644 index 0000000..a80a2ab --- /dev/null +++ b/openspec/specs/database-models/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/database-models (index) +dir: openspec/specs/database-models + +## role +Defines the database schema, SQLAlchemy 2.0 async ORM models, and migration infrastructure for the Headquarter platform's six core entities. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/database-models/.pi-map.index.md +map: openspec/specs/database-models/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/database-models/.pi-map.md b/openspec/specs/database-models/.pi-map.md new file mode 100644 index 0000000..a6c90e4 --- /dev/null +++ b/openspec/specs/database-models/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/database-models +dir: openspec/specs/database-models + +index: openspec/specs/database-models/.pi-map.index.md + +## role +Defines the database schema, SQLAlchemy 2.0 async ORM models, and migration infrastructure for the Headquarter platform's six core entities. +## files +- spec.md | Define database schema and SQLAlchemy 2.0 async models for the Headquarter platform with six core entities, Alembic migrations, and seeding. | dep: PostgreSQL, SQLAlchemy 2.0, asyncpg, Alembic, Fernet, pytest, mypy, ruff +## arch +Specification-driven architecture using SQLAlchemy 2.0 async declarative models with Alembic for migrations, seeding support, and strict separation between schema definition and implementation. +## tags +alembic, spec, define, database, schema, sqlalchemy, async, models +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/docker-infrastructure/.pi-map.index.md b/openspec/specs/docker-infrastructure/.pi-map.index.md new file mode 100644 index 0000000..2c9de54 --- /dev/null +++ b/openspec/specs/docker-infrastructure/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/docker-infrastructure (index) +dir: openspec/specs/docker-infrastructure + +## role +Defines Docker-based infrastructure specifications for multi-service development and production deployment environments. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/docker-infrastructure/.pi-map.index.md +map: openspec/specs/docker-infrastructure/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/docker-infrastructure/.pi-map.md b/openspec/specs/docker-infrastructure/.pi-map.md new file mode 100644 index 0000000..8bd28bd --- /dev/null +++ b/openspec/specs/docker-infrastructure/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/docker-infrastructure +dir: openspec/specs/docker-infrastructure + +index: openspec/specs/docker-infrastructure/.pi-map.index.md + +## role +Defines Docker-based infrastructure specifications for multi-service development and production deployment environments. +## files +- spec.md | Define Docker-based infrastructure specifications for a multi-service development and production deployment environment | dep: Docker, Docker Compose, Make, Python 3.11, Node.js 20+, nginx, Traefik, Vite, Authentik, Redis, PostgreSQL +## arch +Infrastructure-as-code specification using Docker containerization with environment-specific configurations for development and production deployments. +## tags +docker, spec, define, infrastructure, specifications, multi, service, development +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/frontend-foundation/.pi-map.index.md b/openspec/specs/frontend-foundation/.pi-map.index.md new file mode 100644 index 0000000..c8241b8 --- /dev/null +++ b/openspec/specs/frontend-foundation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/frontend-foundation (index) +dir: openspec/specs/frontend-foundation + +## role +Defines the frontend foundation specification for a modern React 18+ TypeScript application with Vite tooling, routing, styling, and authentication patterns. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/frontend-foundation/.pi-map.index.md +map: openspec/specs/frontend-foundation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/frontend-foundation/.pi-map.md b/openspec/specs/frontend-foundation/.pi-map.md new file mode 100644 index 0000000..bb922e7 --- /dev/null +++ b/openspec/specs/frontend-foundation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/frontend-foundation +dir: openspec/specs/frontend-foundation + +index: openspec/specs/frontend-foundation/.pi-map.index.md + +## role +Defines the frontend foundation specification for a modern React 18+ TypeScript application with Vite tooling, routing, styling, and authentication patterns. +## files +- spec.md | Define a specification for a modern React 18+ TypeScript frontend with Vite, React Router, Tailwind CSS, authenticated routing, responsive layout, and dashboard/tool workshop features. | dep: React 18+, TypeScript 5+, Vite, React Router, Tailwind CSS, Axios +## arch +Specification-driven architecture using Vite for build tooling, React Router for client-side routing with authenticated route guards, Tailwind CSS for utility-first styling, and a modular dashboard/tool workshop layout pattern. +## tags +react, vite, spec, define, specification, modern, typescript, frontend +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/git-repo/.pi-map.index.md b/openspec/specs/git-repo/.pi-map.index.md new file mode 100644 index 0000000..2f13910 --- /dev/null +++ b/openspec/specs/git-repo/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/git-repo (index) +dir: openspec/specs/git-repo + +## role +Defines the specification for a bare git repository management service that coordinates on-disk git storage with database-backed metadata. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/git-repo/.pi-map.index.md +map: openspec/specs/git-repo/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/git-repo/.pi-map.md b/openspec/specs/git-repo/.pi-map.md new file mode 100644 index 0000000..e750917 --- /dev/null +++ b/openspec/specs/git-repo/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/git-repo +dir: openspec/specs/git-repo + +index: openspec/specs/git-repo/.pi-map.index.md + +## role +Defines the specification for a bare git repository management service that coordinates on-disk git storage with database-backed metadata. +## files +- spec.md | Specifies requirements for managing bare git repositories on disk with database metadata, including creation, SSH key association, cloning, listing, deletion, and duplicate prevention. | dep: Database models (GitRepository, Project, User), Docker volume for repo storage +## arch +Domain-driven specification pattern with clear separation between storage concerns (filesystem git operations) and metadata concerns (database records), using SSH key-based access control and duplicate prevention logic. +## tags +spec, specifies, requirements, managing, bare, git, repositories, disk +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/instance-proxy/.pi-map.index.md b/openspec/specs/instance-proxy/.pi-map.index.md new file mode 100644 index 0000000..2ce5ca2 --- /dev/null +++ b/openspec/specs/instance-proxy/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/instance-proxy (index) +dir: openspec/specs/instance-proxy + +## role +Defines the API contract for a secure proxy service that routes HTTP/WebSocket traffic to running tool instances with owner-scoped access control. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/instance-proxy/.pi-map.index.md +map: openspec/specs/instance-proxy/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/instance-proxy/.pi-map.md b/openspec/specs/instance-proxy/.pi-map.md new file mode 100644 index 0000000..2f4ad29 --- /dev/null +++ b/openspec/specs/instance-proxy/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/instance-proxy +dir: openspec/specs/instance-proxy + +index: openspec/specs/instance-proxy/.pi-map.index.md + +## role +Defines the API contract for a secure proxy service that routes HTTP/WebSocket traffic to running tool instances with owner-scoped access control. +## files +- spec.md | Specifies API requirements for an HTTP/WebSocket proxy endpoint that forwards requests to running tool instances with owner-based access control +## arch +Specification-driven API design using markdown-based OpenAPI-style documentation with WebSocket upgrade support, reverse proxy patterns, and owner-based authorization middleware. +## tags +spec, specifies, api, requirements, http, websocket, proxy, endpoint +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/instance-runtime-health/.pi-map.index.md b/openspec/specs/instance-runtime-health/.pi-map.index.md new file mode 100644 index 0000000..39fa2a3 --- /dev/null +++ b/openspec/specs/instance-runtime-health/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/instance-runtime-health (index) +dir: openspec/specs/instance-runtime-health + +## role +Defines health monitoring and container state synchronization requirements for container lifecycle management. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/instance-runtime-health/.pi-map.index.md +map: openspec/specs/instance-runtime-health/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/instance-runtime-health/.pi-map.md b/openspec/specs/instance-runtime-health/.pi-map.md new file mode 100644 index 0000000..53be827 --- /dev/null +++ b/openspec/specs/instance-runtime-health/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/instance-runtime-health +dir: openspec/specs/instance-runtime-health + +index: openspec/specs/instance-runtime-health/.pi-map.index.md + +## role +Defines health monitoring and container state synchronization requirements for container lifecycle management. +## files +- spec.md | Specification document defining health monitoring, polling, and container state synchronization requirements for a container/instance management system | dep: Docker, HTTP tunneling, REST API +## arch +Specification-driven design using requirement-based documentation with polling-based health checks and state reconciliation patterns. +## tags +container, spec, specification, document, defining, health, monitoring, polling +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/instance-startup-health/.pi-map.index.md b/openspec/specs/instance-startup-health/.pi-map.index.md new file mode 100644 index 0000000..7b3ec40 --- /dev/null +++ b/openspec/specs/instance-startup-health/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/instance-startup-health (index) +dir: openspec/specs/instance-startup-health + +## role +Defines behavioral specifications for container health verification during tool instance startup lifecycle. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/instance-startup-health/.pi-map.index.md +map: openspec/specs/instance-startup-health/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/instance-startup-health/.pi-map.md b/openspec/specs/instance-startup-health/.pi-map.md new file mode 100644 index 0000000..73617d3 --- /dev/null +++ b/openspec/specs/instance-startup-health/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/instance-startup-health +dir: openspec/specs/instance-startup-health + +index: openspec/specs/instance-startup-health/.pi-map.index.md + +## role +Defines behavioral specifications for container health verification during tool instance startup lifecycle. +## files +- spec.md | Defines requirements for container startup verification, readiness probe execution, and health monitoring for a tool instance management system using Docker Compose | dep: docker compose, docker ps, readiness probes, tunnels, health endpoints, database +## arch +Specification-driven validation using Markdown-based requirements documentation with Docker Compose integration patterns. +## tags +spec, defines, requirements, container, startup, verification, readiness, probe +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-list-detail/.pi-map.index.md b/openspec/specs/mobile-list-detail/.pi-map.index.md new file mode 100644 index 0000000..cdee820 --- /dev/null +++ b/openspec/specs/mobile-list-detail/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-list-detail (index) +dir: openspec/specs/mobile-list-detail + +## role +Defines mobile UI specification for a configuration management system with list/detail views and CRUD operations. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/mobile-list-detail/.pi-map.index.md +map: openspec/specs/mobile-list-detail/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-list-detail/.pi-map.md b/openspec/specs/mobile-list-detail/.pi-map.md new file mode 100644 index 0000000..93f1af5 --- /dev/null +++ b/openspec/specs/mobile-list-detail/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-list-detail +dir: openspec/specs/mobile-list-detail + +index: openspec/specs/mobile-list-detail/.pi-map.index.md + +## role +Defines mobile UI specification for a configuration management system with list/detail views and CRUD operations. +## files +- spec.md | Defines mobile UI requirements for a configuration management system with list views, detail views, editing, and CRUD operations for tool types and config profiles. +## arch +Specification-driven design using markdown-based requirements documentation for mobile list-detail UI pattern with editing capabilities. +## tags +views, spec, defines, mobile, requirements, configuration, management, system +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-navigation/.pi-map.index.md b/openspec/specs/mobile-navigation/.pi-map.index.md new file mode 100644 index 0000000..52a3ae2 --- /dev/null +++ b/openspec/specs/mobile-navigation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-navigation (index) +dir: openspec/specs/mobile-navigation + +## role +Defines mobile navigation UI requirements for grouped bottom navigation with expandable submenu behavior. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/mobile-navigation/.pi-map.index.md +map: openspec/specs/mobile-navigation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-navigation/.pi-map.md b/openspec/specs/mobile-navigation/.pi-map.md new file mode 100644 index 0000000..66fe688 --- /dev/null +++ b/openspec/specs/mobile-navigation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-navigation +dir: openspec/specs/mobile-navigation + +index: openspec/specs/mobile-navigation/.pi-map.index.md + +## role +Defines mobile navigation UI requirements for grouped bottom navigation with expandable submenu behavior. +## files +- spec.md | Defines requirements for grouped bottom navigation with submenu behavior on mobile +## arch +Specification-driven design using markdown-based requirement documentation with behavioral state definitions for mobile-responsive interaction patterns. +## tags +spec, defines, requirements, grouped, bottom, navigation, submenu, behavior +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-repo-workspace/.pi-map.index.md b/openspec/specs/mobile-repo-workspace/.pi-map.index.md new file mode 100644 index 0000000..8cb6e0e --- /dev/null +++ b/openspec/specs/mobile-repo-workspace/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-repo-workspace (index) +dir: openspec/specs/mobile-repo-workspace + +## role +Defines functional requirements and user interaction specifications for the mobile repository workspace interface. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/mobile-repo-workspace/.pi-map.index.md +map: openspec/specs/mobile-repo-workspace/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-repo-workspace/.pi-map.md b/openspec/specs/mobile-repo-workspace/.pi-map.md new file mode 100644 index 0000000..cd24617 --- /dev/null +++ b/openspec/specs/mobile-repo-workspace/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-repo-workspace +dir: openspec/specs/mobile-repo-workspace + +index: openspec/specs/mobile-repo-workspace/.pi-map.index.md + +## role +Defines functional requirements and user interaction specifications for the mobile repository workspace interface. +## files +- spec.md | Define mobile UI requirements for a repository workspace featuring file tree navigation, editor, git, and terminal views +## arch +Specification-driven design using modular view decomposition (file tree, editor, git, terminal) with responsive mobile UX patterns. +## tags +spec, define, mobile, requirements, repository, workspace, featuring, tree +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-tools-navigation/.pi-map.index.md b/openspec/specs/mobile-tools-navigation/.pi-map.index.md new file mode 100644 index 0000000..800505a --- /dev/null +++ b/openspec/specs/mobile-tools-navigation/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-tools-navigation (index) +dir: openspec/specs/mobile-tools-navigation + +## role +Defines the specification for mobile bottom navigation UI behavior and interaction patterns for the Tools menu. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/mobile-tools-navigation/.pi-map.index.md +map: openspec/specs/mobile-tools-navigation/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/mobile-tools-navigation/.pi-map.md b/openspec/specs/mobile-tools-navigation/.pi-map.md new file mode 100644 index 0000000..66eaf3c --- /dev/null +++ b/openspec/specs/mobile-tools-navigation/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/mobile-tools-navigation +dir: openspec/specs/mobile-tools-navigation + +index: openspec/specs/mobile-tools-navigation/.pi-map.index.md + +## role +Defines the specification for mobile bottom navigation UI behavior and interaction patterns for the Tools menu. +## files +- spec.md | Defines mobile UI requirements for a grouped "Tools" bottom navigation with a bottom sheet menu and active state indication +## arch +Specification-driven design using markdown-based requirements documentation with behavioral state definitions for UI components. +## tags +bottom, spec, defines, mobile, requirements, grouped, tools, navigation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/opencode-web-server/.pi-map.index.md b/openspec/specs/opencode-web-server/.pi-map.index.md new file mode 100644 index 0000000..c4bc524 --- /dev/null +++ b/openspec/specs/opencode-web-server/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/opencode-web-server (index) +dir: openspec/specs/opencode-web-server + +## role +Defines the specification for a web-based terminal server container that provides browser-accessible development tools via tmux and ranger. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/opencode-web-server/.pi-map.index.md +map: openspec/specs/opencode-web-server/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/opencode-web-server/.pi-map.md b/openspec/specs/opencode-web-server/.pi-map.md new file mode 100644 index 0000000..1c6d822 --- /dev/null +++ b/openspec/specs/opencode-web-server/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/opencode-web-server +dir: openspec/specs/opencode-web-server + +index: openspec/specs/opencode-web-server/.pi-map.index.md + +## role +Defines the specification for a web-based terminal server container that provides browser-accessible development tools via tmux and ranger. +## files +- spec.md | Specifies requirements for OpenCode containers to run a web terminal server on port 3000 with tmux and ranger, exposed through tunnels and UI buttons +## arch +Container-based microservice specification with tunnel-based networking exposure and UI integration points for embedded terminal access. +## tags +spec, specifies, requirements, opencode, containers, run, web, terminal +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/project-management/.pi-map.index.md b/openspec/specs/project-management/.pi-map.index.md new file mode 100644 index 0000000..6c78ac3 --- /dev/null +++ b/openspec/specs/project-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/project-management (index) +dir: openspec/specs/project-management + +## role +Defines requirements for a project management system that groups repositories with ownership, access control, and SSH key management. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/project-management/.pi-map.index.md +map: openspec/specs/project-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/project-management/.pi-map.md b/openspec/specs/project-management/.pi-map.md new file mode 100644 index 0000000..944dc11 --- /dev/null +++ b/openspec/specs/project-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/project-management +dir: openspec/specs/project-management + +index: openspec/specs/project-management/.pi-map.index.md + +## role +Defines requirements for a project management system that groups repositories with ownership, access control, and SSH key management. +## files +- spec.md | Defines requirements for a project management system that groups repositories with ownership, access control, and SSH key management. | dep: Project, User, GitRepository, SSHKey, git-repo, ssh-keys +## arch +Specification-driven design using markdown-based requirements documentation. +## tags +project, management, ssh, spec, defines, requirements, system, groups +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/readiness-probe-integration/.pi-map.index.md b/openspec/specs/readiness-probe-integration/.pi-map.index.md new file mode 100644 index 0000000..b86a164 --- /dev/null +++ b/openspec/specs/readiness-probe-integration/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/readiness-probe-integration (index) +dir: openspec/specs/readiness-probe-integration + +## role +Defines requirements for container readiness probe configuration, execution, and result storage during instance startup +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/readiness-probe-integration/.pi-map.index.md +map: openspec/specs/readiness-probe-integration/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/readiness-probe-integration/.pi-map.md b/openspec/specs/readiness-probe-integration/.pi-map.md new file mode 100644 index 0000000..0b16415 --- /dev/null +++ b/openspec/specs/readiness-probe-integration/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/readiness-probe-integration +dir: openspec/specs/readiness-probe-integration + +index: openspec/specs/readiness-probe-integration/.pi-map.index.md + +## role +Defines requirements for container readiness probe configuration, execution, and result storage during instance startup +## files +- spec.md | Defines requirements for container readiness probe configuration, execution, and result storage during instance startup | dep: docker, container orchestration, health endpoint, logging system +## arch +Specification-driven documentation pattern using markdown-based requirements definition with no executable code architecture +## tags +spec, defines, requirements, container, readiness, probe, configuration, execution +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/repo-clone-mode/.pi-map.index.md b/openspec/specs/repo-clone-mode/.pi-map.index.md new file mode 100644 index 0000000..ada2e5f --- /dev/null +++ b/openspec/specs/repo-clone-mode/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/repo-clone-mode (index) +dir: openspec/specs/repo-clone-mode + +## role +Defines the contract for host-side git repository cloning operations to enable containerized tools to work with local code. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/repo-clone-mode/.pi-map.index.md +map: openspec/specs/repo-clone-mode/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/repo-clone-mode/.pi-map.md b/openspec/specs/repo-clone-mode/.pi-map.md new file mode 100644 index 0000000..16b123a --- /dev/null +++ b/openspec/specs/repo-clone-mode/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/repo-clone-mode +dir: openspec/specs/repo-clone-mode + +index: openspec/specs/repo-clone-mode/.pi-map.index.md + +## role +Defines the contract for host-side git repository cloning operations to enable containerized tools to work with local code. +## files +- spec.md | Specifies requirements for host-side git repository cloning with SSH key preparation and dirty state detection for containerized tool instances. | dep: GitRepository, ToolInstance, SSHKey, Docker Compose, Git, pytest, mypy, ruff, npm +## arch +Specification-driven design using markdown-based requirements documentation with SSH key management and dirty-state detection concerns. +## tags +git, spec, specifies, requirements, host, side, repository, cloning +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/session-lifecycle-ux/.pi-map.index.md b/openspec/specs/session-lifecycle-ux/.pi-map.index.md new file mode 100644 index 0000000..10d7cb3 --- /dev/null +++ b/openspec/specs/session-lifecycle-ux/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/session-lifecycle-ux (index) +dir: openspec/specs/session-lifecycle-ux + +## role +Defines user experience requirements for session lifecycle management interactions +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/session-lifecycle-ux/.pi-map.index.md +map: openspec/specs/session-lifecycle-ux/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/session-lifecycle-ux/.pi-map.md b/openspec/specs/session-lifecycle-ux/.pi-map.md new file mode 100644 index 0000000..87c3fb3 --- /dev/null +++ b/openspec/specs/session-lifecycle-ux/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/session-lifecycle-ux +dir: openspec/specs/session-lifecycle-ux + +index: openspec/specs/session-lifecycle-ux/.pi-map.index.md + +## role +Defines user experience requirements for session lifecycle management interactions +## files +- spec.md | Defines software requirements for session management UI behaviors including stop confirmation dialogs and immediate deletion updates +## arch +Specification-driven requirements documentation using behavioral scenario descriptions with explicit user flow states and UI feedback expectations +## tags +spec, defines, software, requirements, session, management, behaviors, including +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/sessions-hub/.pi-map.index.md b/openspec/specs/sessions-hub/.pi-map.index.md new file mode 100644 index 0000000..0eb3086 --- /dev/null +++ b/openspec/specs/sessions-hub/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/sessions-hub (index) +dir: openspec/specs/sessions-hub + +## role +Defines technical specifications for a centralized user session management feature that enables viewing, filtering, and terminating active sessions across devices. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/sessions-hub/.pi-map.index.md +map: openspec/specs/sessions-hub/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/sessions-hub/.pi-map.md b/openspec/specs/sessions-hub/.pi-map.md new file mode 100644 index 0000000..5c7d2e3 --- /dev/null +++ b/openspec/specs/sessions-hub/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/sessions-hub +dir: openspec/specs/sessions-hub + +index: openspec/specs/sessions-hub/.pi-map.index.md + +## role +Defines technical specifications for a centralized user session management feature that enables viewing, filtering, and terminating active sessions across devices. +## files +- spec.md | Defines technical specifications for a "Sessions Hub" feature including requirements, API endpoints, UI layouts, state management, and quality gates for managing user sessions in a web application. | dep: REST API, TypeScript, React/frontend framework (implied by UI specs and quality gates), polling-based state management, Pydantic/BaseModel +## arch +Specification-driven design using structured documentation with hierarchical sections (requirements, API, UI, state, quality gates) to enforce contract-first development between frontend and backend teams. +## tags +sessions, spec, defines, technical, specifications, hub, feature, including +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/smart-tunnel-recovery/.pi-map.index.md b/openspec/specs/smart-tunnel-recovery/.pi-map.index.md new file mode 100644 index 0000000..40292cb --- /dev/null +++ b/openspec/specs/smart-tunnel-recovery/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/smart-tunnel-recovery (index) +dir: openspec/specs/smart-tunnel-recovery + +## role +Defines health check classification requirements to distinguish infrastructure tunnel failures from application-level errors and specify their respective UI behaviors and automated recovery procedures. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/smart-tunnel-recovery/.pi-map.index.md +map: openspec/specs/smart-tunnel-recovery/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/smart-tunnel-recovery/.pi-map.md b/openspec/specs/smart-tunnel-recovery/.pi-map.md new file mode 100644 index 0000000..92317f1 --- /dev/null +++ b/openspec/specs/smart-tunnel-recovery/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/smart-tunnel-recovery +dir: openspec/specs/smart-tunnel-recovery + +index: openspec/specs/smart-tunnel-recovery/.pi-map.index.md + +## role +Defines health check classification requirements to distinguish infrastructure tunnel failures from application-level errors and specify their respective UI behaviors and automated recovery procedures. +## files +- spec.md | Specifies requirements for classifying tunnel failures versus application errors in a health check system with different UI behaviors and recovery actions. +## arch +Specification-driven requirements document using scenario-based behavioral specification with clear separation between failure domains (tunnel vs. application), state-based recovery actions, and conditional UI response patterns. +## tags +spec, specifies, requirements, classifying, tunnel, failures, versus, application +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/ssh-keys/.pi-map.index.md b/openspec/specs/ssh-keys/.pi-map.index.md new file mode 100644 index 0000000..61f2285 --- /dev/null +++ b/openspec/specs/ssh-keys/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/ssh-keys (index) +dir: openspec/specs/ssh-keys + +## role +Defines security requirements for SSH key generation, storage, and access control for Git operations. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/ssh-keys/.pi-map.index.md +map: openspec/specs/ssh-keys/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/ssh-keys/.pi-map.md b/openspec/specs/ssh-keys/.pi-map.md new file mode 100644 index 0000000..ed71ea9 --- /dev/null +++ b/openspec/specs/ssh-keys/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/ssh-keys +dir: openspec/specs/ssh-keys + +index: openspec/specs/ssh-keys/.pi-map.index.md + +## role +Defines security requirements for SSH key generation, storage, and access control for Git operations. +## files +- spec.md | Specifies requirements for generating, managing, and securing Ed25519 SSH keys for git operations with project-scoped access control. | dep: SSHKey, User, Project, cryptography, pytest, mypy, ruff, npm +## arch +Specification-driven security policy using Ed25519 cryptography with project-scoped RBAC for multi-tenant key isolation. +## tags +project, spec, specifies, requirements, generating, managing, securing, ed25519 +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-config-management/.pi-map.index.md b/openspec/specs/tool-config-management/.pi-map.index.md new file mode 100644 index 0000000..3248b96 --- /dev/null +++ b/openspec/specs/tool-config-management/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-config-management (index) +dir: openspec/specs/tool-config-management + +## role +Defines requirements for a tool configuration management system with runtime fields, split-pane UI, JSON editors, and validation. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-config-management/.pi-map.index.md +map: openspec/specs/tool-config-management/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-config-management/.pi-map.md b/openspec/specs/tool-config-management/.pi-map.md new file mode 100644 index 0000000..f29d8bc --- /dev/null +++ b/openspec/specs/tool-config-management/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-config-management +dir: openspec/specs/tool-config-management + +index: openspec/specs/tool-config-management/.pi-map.index.md + +## role +Defines requirements for a tool configuration management system with runtime fields, split-pane UI, JSON editors, and validation. +## files +- spec.md | Defines requirements for a tool configuration system with runtime fields, split-pane UI, JSON editors, and validation +## arch +Specification-driven architecture using markdown-based requirements documentation with UI/UX patterns for split-pane interfaces, JSON schema validation, and runtime field configuration. +## tags +spec, defines, requirements, tool, configuration, system, runtime, fields +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-instances/.pi-map.index.md b/openspec/specs/tool-instances/.pi-map.index.md new file mode 100644 index 0000000..9aff9cc --- /dev/null +++ b/openspec/specs/tool-instances/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-instances (index) +dir: openspec/specs/tool-instances + +## role +Defines requirements for managing tool instances with health monitoring, tunnel connectivity, clone mode, and SSH key operations. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-instances/.pi-map.index.md +map: openspec/specs/tool-instances/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-instances/.pi-map.md b/openspec/specs/tool-instances/.pi-map.md new file mode 100644 index 0000000..bbad44a --- /dev/null +++ b/openspec/specs/tool-instances/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-instances +dir: openspec/specs/tool-instances + +index: openspec/specs/tool-instances/.pi-map.index.md + +## role +Defines requirements for managing tool instances with health monitoring, tunnel connectivity, clone mode, and SSH key operations. +## files +- spec.md | Define modified and added requirements for a tool instance management system including status monitoring, health checks, tunnel management, clone mode operations, and SSH key handling +## arch +Specification-driven requirements document using structured markdown with sections for status, health checks, tunnels, clone mode, and SSH keys. +## tags +management, spec, define, modified, added, requirements, tool, instance +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-port-configuration/.pi-map.index.md b/openspec/specs/tool-port-configuration/.pi-map.index.md new file mode 100644 index 0000000..452aa04 --- /dev/null +++ b/openspec/specs/tool-port-configuration/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-port-configuration (index) +dir: openspec/specs/tool-port-configuration + +## role +Defines validation requirements for tool port configurations including default ports, compose template exposure, and multi-interface support. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-port-configuration/.pi-map.index.md +map: openspec/specs/tool-port-configuration/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-port-configuration/.pi-map.md b/openspec/specs/tool-port-configuration/.pi-map.md new file mode 100644 index 0000000..68876df --- /dev/null +++ b/openspec/specs/tool-port-configuration/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-port-configuration +dir: openspec/specs/tool-port-configuration + +index: openspec/specs/tool-port-configuration/.pi-map.index.md + +## role +Defines validation requirements for tool port configurations including default ports, compose template exposure, and multi-interface support. +## files +- spec.md | Defines requirements for tool type validation including default ports, compose template port exposure, and multiple interface support +## arch +Specification-driven requirements document using markdown-based declarative specification pattern. +## tags +spec, defines, requirements, tool, type, validation, including, default +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-terminal-startup-command/.pi-map.index.md b/openspec/specs/tool-terminal-startup-command/.pi-map.index.md new file mode 100644 index 0000000..7bb18dc --- /dev/null +++ b/openspec/specs/tool-terminal-startup-command/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-terminal-startup-command (index) +dir: openspec/specs/tool-terminal-startup-command + +## role +Defines requirements for pre-shell initialization commands in terminal tool configurations. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-terminal-startup-command/.pi-map.index.md +map: openspec/specs/tool-terminal-startup-command/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-terminal-startup-command/.pi-map.md b/openspec/specs/tool-terminal-startup-command/.pi-map.md new file mode 100644 index 0000000..524c0bc --- /dev/null +++ b/openspec/specs/tool-terminal-startup-command/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-terminal-startup-command +dir: openspec/specs/tool-terminal-startup-command + +index: openspec/specs/tool-terminal-startup-command/.pi-map.index.md + +## role +Defines requirements for pre-shell initialization commands in terminal tool configurations. +## files +- spec.md | Specifies requirements for adding an optional `startup_command` field to terminal tool types that executes before the interactive shell in new terminal sessions. | dep: tool-types-definition, tool-terminal +## arch +Specification-driven design using markdown-based requirements documents with field extension patterns for tool type schemas. +## tags +terminal, tool, types, spec, specifies, requirements, adding, optional +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-terminal/.pi-map.index.md b/openspec/specs/tool-terminal/.pi-map.index.md new file mode 100644 index 0000000..cafd002 --- /dev/null +++ b/openspec/specs/tool-terminal/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-terminal (index) +dir: openspec/specs/tool-terminal + +## role +Defines the specification for a browser-based terminal interface that enables secure, real-time access to running Docker containers via WebSocket connections. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-terminal/.pi-map.index.md +map: openspec/specs/tool-terminal/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-terminal/.pi-map.md b/openspec/specs/tool-terminal/.pi-map.md new file mode 100644 index 0000000..9da66ee --- /dev/null +++ b/openspec/specs/tool-terminal/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-terminal +dir: openspec/specs/tool-terminal + +index: openspec/specs/tool-terminal/.pi-map.index.md + +## role +Defines the specification for a browser-based terminal interface that enables secure, real-time access to running Docker containers via WebSocket connections. +## files +- spec.md | Specifies requirements for a browser-based WebSocket terminal system for accessing running Docker containers with session management, I/O streaming, and access control. | dep: tool-instances, auth-oauth, xterm.js, ptyprocess +## arch +WebSocket-based streaming architecture with session management, bidirectional I/O streaming, and access control for containerized environments. +## tags +spec, specifies, requirements, browser, websocket, terminal, system, accessing +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-type-port-visibility/.pi-map.index.md b/openspec/specs/tool-type-port-visibility/.pi-map.index.md new file mode 100644 index 0000000..7aba789 --- /dev/null +++ b/openspec/specs/tool-type-port-visibility/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-type-port-visibility (index) +dir: openspec/specs/tool-type-port-visibility + +## role +Defines validation rules for conditionally showing or hiding port configuration fields based on whether a tool type requires network port settings. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-type-port-visibility/.pi-map.index.md +map: openspec/specs/tool-type-port-visibility/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-type-port-visibility/.pi-map.md b/openspec/specs/tool-type-port-visibility/.pi-map.md new file mode 100644 index 0000000..89f61ba --- /dev/null +++ b/openspec/specs/tool-type-port-visibility/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-type-port-visibility +dir: openspec/specs/tool-type-port-visibility + +index: openspec/specs/tool-type-port-visibility/.pi-map.index.md + +## role +Defines validation rules for conditionally showing or hiding port configuration fields based on whether a tool type requires network port settings. +## files +- spec.md | Defines requirements for conditional port configuration visibility and validation based on a tool type's `requires_port` flag +## arch +Specification-driven validation pattern using a single markdown specification file to declaratively define conditional UI visibility and form validation requirements. +## tags +port, spec, defines, requirements, conditional, configuration, visibility, validation +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-type-single-interface/.pi-map.index.md b/openspec/specs/tool-type-single-interface/.pi-map.index.md new file mode 100644 index 0000000..da8cb8b --- /dev/null +++ b/openspec/specs/tool-type-single-interface/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-type-single-interface (index) +dir: openspec/specs/tool-type-single-interface + +## role +Defines specification requirements for a tool type system that enforces single interface constraints, validates allowed values, and handles legacy data migration. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-type-single-interface/.pi-map.index.md +map: openspec/specs/tool-type-single-interface/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-type-single-interface/.pi-map.md b/openspec/specs/tool-type-single-interface/.pi-map.md new file mode 100644 index 0000000..7c65fc3 --- /dev/null +++ b/openspec/specs/tool-type-single-interface/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-type-single-interface +dir: openspec/specs/tool-type-single-interface + +index: openspec/specs/tool-type-single-interface/.pi-map.index.md + +## role +Defines specification requirements for a tool type system that enforces single interface constraints, validates allowed values, and handles legacy data migration. +## files +- spec.md | Defines requirements for enforcing single interface types, validating allowed values, and migrating legacy data for a tool type system +## arch +Specification-driven architecture using markdown-based requirements documentation with validation rules, allowed value constraints, and data migration patterns for backward compatibility. +## tags +spec, defines, requirements, enforcing, single, interface, types, validating +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-types-definition/.pi-map.index.md b/openspec/specs/tool-types-definition/.pi-map.index.md new file mode 100644 index 0000000..7e098a5 --- /dev/null +++ b/openspec/specs/tool-types-definition/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-types-definition (index) +dir: openspec/specs/tool-types-definition + +## role +Defines requirements for a tool type management system with CRUD API, Docker template validation, and variable substitution for development environments. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-types-definition/.pi-map.index.md +map: openspec/specs/tool-types-definition/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-types-definition/.pi-map.md b/openspec/specs/tool-types-definition/.pi-map.md new file mode 100644 index 0000000..7f49e92 --- /dev/null +++ b/openspec/specs/tool-types-definition/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-types-definition +dir: openspec/specs/tool-types-definition + +index: openspec/specs/tool-types-definition/.pi-map.index.md + +## role +Defines requirements for a tool type management system with CRUD API, Docker template validation, and variable substitution for development environments. +## files +- spec.md | Defines requirements for a tool type management system with CRUD API, Docker template validation, and variable substitution for development environments. | dep: REST API, Docker Compose, YAML parser, authentication/authorization system, database ORM +## arch +Specification-driven design using markdown-based requirements documentation with Docker template patterns and variable substitution mechanisms for environment configuration. +## tags +spec, defines, requirements, tool, type, management, system, crud +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-types/.pi-map.index.md b/openspec/specs/tool-types/.pi-map.index.md new file mode 100644 index 0000000..3ae4ec4 --- /dev/null +++ b/openspec/specs/tool-types/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-types (index) +dir: openspec/specs/tool-types + +## role +Defines specifications for a database-driven tool type management system that replaces hardcoded tool definitions with configurable, migratable records. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tool-types/.pi-map.index.md +map: openspec/specs/tool-types/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tool-types/.pi-map.md b/openspec/specs/tool-types/.pi-map.md new file mode 100644 index 0000000..ed69ee2 --- /dev/null +++ b/openspec/specs/tool-types/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tool-types +dir: openspec/specs/tool-types + +index: openspec/specs/tool-types/.pi-map.index.md + +## role +Defines specifications for a database-driven tool type management system that replaces hardcoded tool definitions with configurable, migratable records. +## files +- spec.md | Defines modified requirements for a tool type management system with database-stored definitions, Docker Compose template validation, and migration of built-in tools to regular records. | dep: database, docker compose validation, migration system +## arch +Specification-driven design using markdown-based requirements docs with Docker Compose validation rules and migration patterns for built-in to dynamic tool type conversion. +## tags +database, spec, defines, modified, requirements, tool, type, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/traefik-deployment/.pi-map.index.md b/openspec/specs/traefik-deployment/.pi-map.index.md new file mode 100644 index 0000000..8759aaf --- /dev/null +++ b/openspec/specs/traefik-deployment/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/traefik-deployment (index) +dir: openspec/specs/traefik-deployment + +## role +Defines requirements and documentation standards for Traefik reverse proxy deployment using Docker Compose. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/traefik-deployment/.pi-map.index.md +map: openspec/specs/traefik-deployment/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/traefik-deployment/.pi-map.md b/openspec/specs/traefik-deployment/.pi-map.md new file mode 100644 index 0000000..1a2274f --- /dev/null +++ b/openspec/specs/traefik-deployment/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/traefik-deployment +dir: openspec/specs/traefik-deployment + +index: openspec/specs/traefik-deployment/.pi-map.index.md + +## role +Defines requirements and documentation standards for Traefik reverse proxy deployment using Docker Compose. +## files +- spec.md | Specifies requirements for Traefik Docker Compose deployment configuration and environment variable documentation | dep: Traefik, Docker Compose, Authentik, OIDC +## arch +Specification-driven configuration with environment-based parameterization and infrastructure-as-code patterns. +## tags +traefik, spec, specifies, requirements, docker, compose, deployment, configuration +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/tunnel-health-monitoring/.pi-map.index.md b/openspec/specs/tunnel-health-monitoring/.pi-map.index.md new file mode 100644 index 0000000..89789d9 --- /dev/null +++ b/openspec/specs/tunnel-health-monitoring/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/tunnel-health-monitoring (index) +dir: openspec/specs/tunnel-health-monitoring + +## role +Defines behavioral specifications for health monitoring and automatic recovery of cloudflared tunnel connections to ensure high availability. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/tunnel-health-monitoring/.pi-map.index.md +map: openspec/specs/tunnel-health-monitoring/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/tunnel-health-monitoring/.pi-map.md b/openspec/specs/tunnel-health-monitoring/.pi-map.md new file mode 100644 index 0000000..c86bd02 --- /dev/null +++ b/openspec/specs/tunnel-health-monitoring/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/tunnel-health-monitoring +dir: openspec/specs/tunnel-health-monitoring + +index: openspec/specs/tunnel-health-monitoring/.pi-map.index.md + +## role +Defines behavioral specifications for health monitoring and automatic recovery of cloudflared tunnel connections to ensure high availability. +## files +- spec.md | Defines requirements for monitoring and recreating cloudflared tunnels for running instances | dep: cloudflared, HTTP health checks, UI components +## arch +Specification-driven requirements document using markdown-based behavioral specification pattern with no executable code, focusing on system-level observability and self-healing tunnel infrastructure. +## tags +cloudflared, spec, defines, requirements, monitoring, recreating, tunnels, running +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/user-config/.pi-map.index.md b/openspec/specs/user-config/.pi-map.index.md new file mode 100644 index 0000000..7ce3824 --- /dev/null +++ b/openspec/specs/user-config/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/user-config (index) +dir: openspec/specs/user-config + +## role +Defines data models and API contracts for a user-configurable preferences system with JSONB storage and theme integration. +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/user-config/.pi-map.index.md +map: openspec/specs/user-config/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/user-config/.pi-map.md b/openspec/specs/user-config/.pi-map.md new file mode 100644 index 0000000..edc066b --- /dev/null +++ b/openspec/specs/user-config/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/user-config +dir: openspec/specs/user-config + +index: openspec/specs/user-config/.pi-map.index.md + +## role +Defines data models and API contracts for a user-configurable preferences system with JSONB storage and theme integration. +## files +- spec.md | Defines specifications for a user configuration system that stores JSONB key-value preferences, supports specific config keys, and integrates with frontend theme application. | dep: UserConfig, User, auth-oauth, pytest, mypy, ruff, npm +## arch +Specification-driven architecture using markdown-based API documentation with JSONB schema definitions for flexible key-value storage. +## tags +user, spec, defines, specifications, configuration, system, stores, jsonb +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/specs/user-profile/.pi-map.index.md b/openspec/specs/user-profile/.pi-map.index.md new file mode 100644 index 0000000..9952634 --- /dev/null +++ b/openspec/specs/user-profile/.pi-map.index.md @@ -0,0 +1,19 @@ +# openspec/specs/user-profile (index) +dir: openspec/specs/user-profile + +## role +Defines functional specifications for user profile management capabilities including retrieval, updates, and local avatar storage +## parent +index: openspec/specs/.pi-map.index.md +map: openspec/specs/.pi-map.md +## children +- +## files +- spec.md +## links +index: openspec/specs/user-profile/.pi-map.index.md +map: openspec/specs/user-profile/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/specs/user-profile/.pi-map.md b/openspec/specs/user-profile/.pi-map.md new file mode 100644 index 0000000..3004bc6 --- /dev/null +++ b/openspec/specs/user-profile/.pi-map.md @@ -0,0 +1,19 @@ +# openspec/specs/user-profile +dir: openspec/specs/user-profile + +index: openspec/specs/user-profile/.pi-map.index.md + +## role +Defines functional specifications for user profile management capabilities including retrieval, updates, and local avatar storage +## files +- spec.md | Defines functional specifications for a user profile management system including profile retrieval, updates, and local avatar storage | dep: auth-oauth, User database model, pytest, mypy, ruff, npm/typecheck, npm/lint +## arch +Specification-driven documentation pattern using markdown-based requirements definition without implementation code +## tags +profile, npm, spec, defines, functional, specifications, user, management +## symbols +- +## workflows +- +## dirty +- diff --git a/openspec/tasks/.pi-map.index.md b/openspec/tasks/.pi-map.index.md new file mode 100644 index 0000000..42bf66a --- /dev/null +++ b/openspec/tasks/.pi-map.index.md @@ -0,0 +1,23 @@ +# openspec/tasks (index) +dir: openspec/tasks + +## role +Contains technical specification documents tracking planned features and architectural improvements for the container development environment platform. +## parent +index: openspec/.pi-map.index.md +map: openspec/.pi-map.md +## children +- +## files +- config-profile-multi-repo-mounts.md +- home-path-expansion.md +- mount-specificity-ordering.md +- terminal-responsiveness.md +- tool-definition-manifest.md +## links +index: openspec/tasks/.pi-map.index.md +map: openspec/tasks/.pi-map.md +## workflows +- +## dirty +- diff --git a/openspec/tasks/.pi-map.md b/openspec/tasks/.pi-map.md new file mode 100644 index 0000000..913fd3b --- /dev/null +++ b/openspec/tasks/.pi-map.md @@ -0,0 +1,23 @@ +# openspec/tasks +dir: openspec/tasks + +index: openspec/tasks/.pi-map.index.md + +## role +Contains technical specification documents tracking planned features and architectural improvements for the container development environment platform. +## files +- config-profile-multi-repo-mounts.md | Technical specification for refactoring git mount configuration to support multiple repository mappings per mount instead of single source/target pairs | dep: git, docker compose, react/typescript, pytest, npm, fastapi +- home-path-expansion.md | Specification document for implementing ~ and $HOME expansion in container mount paths across backend services | dep: config_profile_resolver, manifest_compiler, tool_instances, pytest, npm +- mount-specificity-ordering.md | Tracks completion status of a project task for implementing mount specificity ordering in Docker volume handling | dep: docker.py, pytest, tsc +- terminal-responsiveness.md | A technical specification document outlining 7 pending tasks to improve web terminal performance through asyncio-native I/O, binary WebSocket frames, WebGL rendering, flow control, and comprehensive benchmarking. | dep: asyncio, WebSocket, xterm-addon-webgl, docker, pytest +- tool-definition-manifest.md | A project task specification document defining a multi-PR system for implementing a Tool Definition Manifest System with backend manifest compilation, frontend workshop UI, and legacy migration support. | dep: SQLAlchemy, Alembic, Docker, Docker Compose, FastAPI/REST API, React/TypeScript frontend +## arch +Markdown-based task tracking system using specification-driven development with documents covering backend services (mount handling, path expansion), frontend systems (WebGL terminal rendering), and cross-cutting concerns (async I/O, manifest systems). +## tags +mount, specification, pytest, docker, manifest, multi, document, implementing +## symbols +- +## workflows +- +## dirty +- diff --git a/scripts/.pi-map.index.md b/scripts/.pi-map.index.md new file mode 100644 index 0000000..83d798d --- /dev/null +++ b/scripts/.pi-map.index.md @@ -0,0 +1,21 @@ +# scripts (index) +dir: scripts + +## role +Operational utility scripts for database maintenance and security management in containerized production environments. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- +## files +- fix_ghost_migration.sh +- update_db_password.py +## links +index: scripts/.pi-map.index.md +map: scripts/.pi-map.md +## workflows +- change scripts behavior + read: fix_ghost_migration.sh, update_db_password.py +## dirty +- diff --git a/scripts/.pi-map.md b/scripts/.pi-map.md new file mode 100644 index 0000000..b5cb387 --- /dev/null +++ b/scripts/.pi-map.md @@ -0,0 +1,26 @@ +# scripts +dir: scripts + +index: scripts/.pi-map.index.md + +## role +Operational utility scripts for database maintenance and security management in containerized production environments. +## files +- fix_ghost_migration.sh | Diagnoses a "ghost" Alembic migration issue by checking for orphaned migration files, database version state, and column existence in a production environment. | dep: bash, find, psql, grep +- update_db_password.py | Securely update the PostgreSQL password for the 'headquarter' database user via a Docker container | exp: func:main() → None, call:getpass.getpass, call:print, call:sys.exit, call:subprocess.run, call:result.stdout.strip | dep: getpass, subprocess, sys +## arch +Standalone imperative shell scripts and Python scripts using subprocess calls to Docker CLI for container orchestration, with direct database connectivity via SQLAlchemy/Alembic for schema introspection and PostgreSQL for credential updates. +## tags +migration, ghost, update, password, database, fix, main, call:getpass.getpass +## symbols +- main +- call:getpass.getpass +- call:print +- call:sys.exit +- call:subprocess.run +- call:result.stdout.strip +## workflows +- change scripts behavior + read: fix_ghost_migration.sh, update_db_password.py +## dirty +- diff --git a/tool-images/.pi-map.index.md b/tool-images/.pi-map.index.md new file mode 100644 index 0000000..6fda382 --- /dev/null +++ b/tool-images/.pi-map.index.md @@ -0,0 +1,24 @@ +# tool-images (index) +dir: tool-images + +## role +Provides containerized development environment templates for various IDE, notebook, and AI agent tools used in the Headquarter platform. +## parent +index: ./.pi-map.index.md +map: ./.pi-map.md +## children +- +## files +- README.md +- base.dockerfile +- code-server.dockerfile +- jupyter.dockerfile +- opencode.dockerfile +- pi-agent.dockerfile +## links +index: tool-images/.pi-map.index.md +map: tool-images/.pi-map.md +## workflows +- +## dirty +- diff --git a/tool-images/.pi-map.md b/tool-images/.pi-map.md new file mode 100644 index 0000000..6974b19 --- /dev/null +++ b/tool-images/.pi-map.md @@ -0,0 +1,24 @@ +# tool-images +dir: tool-images + +index: tool-images/.pi-map.index.md + +## role +Provides containerized development environment templates for various IDE, notebook, and AI agent tools used in the Headquarter platform. +## files +- README.md | Documents a directory of Dockerfile templates for base tool types used in the Headquarter platform | dep: Docker, git, neovim, ranger, tmux, htop, tree, jq, Node.js 20, Pi Coding Agent +- base.dockerfile | Defines a base Docker image for development environments with common CLI tools, Node.js, and a non-root user setup. | dep: ubuntu:24.04, curl, wget, git, neovim, ranger, tmux, htop, tree, jq, ca-certificates, nodejs +- code-server.dockerfile | Builds a Docker image for browser-based VS Code with additional development tools and Node.js | dep: linuxserver/code-server, git, neovim, ranger, tmux, htop, tree, jq, Node.js 20 +- jupyter.dockerfile | Builds a Docker image for Jupyter Notebook/Lab with additional CLI tools and git configuration | dep: jupyter/scipy-notebook, apt, git, neovim, ranger, tmux, htop, tree, jq +- opencode.dockerfile | Builds a Docker container for running the OpenCode AI agent as a server | dep: ubuntu:24.04, nodejs, npm, python3, git, opencode +- pi-agent.dockerfile | Builds a Docker image for a terminal-based coding environment with the Pi Coding Agent, development tools, and a non-root user setup. | dep: ubuntu:24.04, nodejs, npm, @earendil-works/pi-coding-agent, neovim, ranger, tmux, git, python3, build-essential +## arch +Multi-stage Dockerfile pattern with shared base image containing common CLI utilities, Node.js, and non-root user security model, specialized per tool type (VS Code server, Jupyter, OpenCode agent, Pi agent). +## tags +git, docker, neovim, ranger, tmux, agent, base, htop +## symbols +- +## workflows +- +## dirty +-