docs: update agent teams docs and navigation
This commit is contained in:
parent
3ead3207e6
commit
eb83ac92b2
21 changed files with 255 additions and 61 deletions
13
AGENT_CRITICAL_GUARDRAILS.md
Normal file
13
AGENT_CRITICAL_GUARDRAILS.md
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
# Agent Critical Guardrails
|
||||
|
||||
These are the hard rules to keep agent work predictable and safe in this repo.
|
||||
|
||||
- Read `CLAUDE.md` first, then follow `docs/FEATURE_ARCHITECTURE_STANDARD.md` for new medium and large features.
|
||||
- Use `pnpm` for project commands. Do not switch to `npm` or `yarn`.
|
||||
- Do not run `pnpm lint:fix` unless the user explicitly asks for broad formatting changes.
|
||||
- Keep main, preload, renderer, and shared responsibilities separate.
|
||||
- Use `wrapAgentBlock(text)` instead of manually concatenating agent block markers.
|
||||
- Preserve task/subagent filtering, structured task refs, and message parsing semantics.
|
||||
- Validate IPC and other main-process inputs defensively and fail gracefully.
|
||||
- Treat `docs/team-management/debugging-agent-teams.md` as the first stop for team launch hangs, bootstrap issues, or missing teammate replies.
|
||||
- Do not revert unrelated user changes or other agents' edits.
|
||||
|
|
@ -28,6 +28,7 @@ Always use pnpm (not npm/yarn) for this project.
|
|||
Workspace membership is canonical in `pnpm-workspace.yaml`; do not re-add root `package.json.workspaces`, because npm subproject installs in Codex Cloud must treat nested packages as standalone projects.
|
||||
Do NOT run `pnpm lint:fix` unless the user explicitly asks for it — it interferes with agents running in parallel.
|
||||
When running build/typecheck/test commands, pipe through `tail -20` to avoid flooding the context window (e.g. `pnpm typecheck 2>&1 | tail -20`).
|
||||
- Hard guardrails: [`AGENT_CRITICAL_GUARDRAILS.md`](AGENT_CRITICAL_GUARDRAILS.md)
|
||||
|
||||
- `pnpm install` - Install dependencies
|
||||
- `pnpm dev` - Dev server with hot reload
|
||||
|
|
|
|||
|
|
@ -6,7 +6,72 @@ The format is based on Keep a Changelog and this project follows Semantic Versio
|
|||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.0.0] - 2026-03-19
|
||||
## [1.2.0] - 2026-03-31
|
||||
|
||||
### Added
|
||||
|
||||
- Agent Graph with real-time force-directed visualization, kanban task layout, animated message particles, member hexagons with avatars, and cross-team ghost nodes.
|
||||
- Per-team tool approval controls with readable permission prompts and interactive AskUserQuestion buttons.
|
||||
- Task comment notifications.
|
||||
|
||||
### Changed
|
||||
|
||||
- Team page performance with many tasks.
|
||||
- Team provisioning visibility on the team screen.
|
||||
- Default action mode switched to `delegate` so the lead coordinates instead of executing.
|
||||
- Skip pre-flight CLI check button in launch/create dialogs.
|
||||
- MCP config moved from `/tmp` to `userData` with cleanup on spawn failures.
|
||||
- Task change presence tracking overhaul.
|
||||
- Session label formatting and session item display improvements.
|
||||
- Update dialog layout cleanup.
|
||||
- Auto-approve banner softened from warning to info styling.
|
||||
- macOS title bar drag area improvements.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Tool approval sheet hooks ordering crash.
|
||||
- Auto-approve reset when launching with manual approval.
|
||||
- `Allow all` and Settings panel targeting the wrong team.
|
||||
- AskUserQuestion Enter key bypass and edge cases.
|
||||
- Updater installing non-newer versions and showing updates for unavailable platforms.
|
||||
- Permission request deduplication across all entry paths.
|
||||
- Renderer IPC sends during crash recovery.
|
||||
- Standalone mode without Electron.
|
||||
- Sanitized inline HTML in markdown rendering.
|
||||
|
||||
## [1.1.0] - 2026-03-25
|
||||
|
||||
### Added
|
||||
|
||||
- React 19 + Electron 40 migration.
|
||||
- User-initiated task starts from the kanban board.
|
||||
- Auth troubleshooting guide in the CLI status banner.
|
||||
- Syntax highlighting for R, Ruby, PHP, and SQL code blocks.
|
||||
- Collapsible output sections in tool results with markdown preview toggle.
|
||||
- Styled `@`-mentions in task comments with colored member badges.
|
||||
- Worktree-based projects detected on the dashboard.
|
||||
|
||||
### Changed
|
||||
|
||||
- 3x faster transcript search with optimized plain text matching.
|
||||
- Single-pass message processing replaces multiple filter passes.
|
||||
- Protocol noise filtering hides raw idle and teammate messages from lead thoughts.
|
||||
- Improved kanban column styling with colored headers and subtle body tints.
|
||||
- Teams sorted by last activity with alphabetical fallback.
|
||||
- Dynamic member colors in the Add Members dialog.
|
||||
|
||||
### Fixed
|
||||
|
||||
- Cost overcounting from duplicate request ID tracking.
|
||||
- WSL mount path translation and Windows drive letter normalization.
|
||||
- Sidebar repo and branch state not syncing when switching tabs.
|
||||
- CLI auth detection with non-default config paths.
|
||||
- XSS vulnerability via unsanitized inline HTML in markdown.
|
||||
- Standalone mode crash without Electron environment.
|
||||
- Stale sessions incorrectly shown as ongoing after 5 minutes of inactivity.
|
||||
- Incorrect error message when attaching files to offline team lead.
|
||||
|
||||
## [1.0.0] - 2026-03-23
|
||||
|
||||
Initial public release.
|
||||
|
||||
|
|
|
|||
|
|
@ -16,18 +16,24 @@ This document defines the default architecture for medium and large features in
|
|||
|
||||
```text
|
||||
src/features/<feature-name>/
|
||||
index.ts
|
||||
contracts/
|
||||
index.ts
|
||||
core/
|
||||
domain/
|
||||
application/
|
||||
main/
|
||||
index.ts
|
||||
composition/
|
||||
application/
|
||||
adapters/
|
||||
input/
|
||||
output/
|
||||
infrastructure/
|
||||
preload/
|
||||
index.ts
|
||||
renderer/
|
||||
index.ts
|
||||
```
|
||||
|
||||
Use this template by default when a feature:
|
||||
|
|
@ -37,8 +43,29 @@ Use this template by default when a feature:
|
|||
- needs its own transport bridge or integration surface
|
||||
- is expected to grow with new providers, sources, or presentation flows
|
||||
|
||||
`index.ts` and `main/application/` are optional. Add them only when they have a
|
||||
clear public or runtime-orchestration role.
|
||||
|
||||
## Layer Responsibilities
|
||||
|
||||
### `index.ts`
|
||||
|
||||
Optional root public barrel for the feature.
|
||||
|
||||
Use it for:
|
||||
|
||||
- stable type re-exports from `contracts/`
|
||||
- small pure facades that are intentionally shared across layers
|
||||
- feature factories when the root barrel is intentionally main-owned and
|
||||
imported only from main-process code
|
||||
|
||||
Not allowed:
|
||||
|
||||
- accidental wildcard exports from implementation folders
|
||||
- mixing browser-safe exports with main-only exports without making process
|
||||
ownership obvious
|
||||
- replacing the layer entrypoints when callers need a process-specific surface
|
||||
|
||||
### `contracts/`
|
||||
|
||||
Cross-process public API for the feature.
|
||||
|
|
@ -113,6 +140,24 @@ Responsibilities:
|
|||
- translate transport input into use case calls
|
||||
- keep transport concerns out of use cases
|
||||
|
||||
### `main/application/`
|
||||
|
||||
Optional main-process application services.
|
||||
|
||||
Use this only when code is too runtime-aware for `core/application`, but is not a
|
||||
transport adapter or low-level infrastructure helper.
|
||||
|
||||
Examples:
|
||||
|
||||
- main-only readers that orchestrate runtime services
|
||||
- process-aware tracking or coordination helpers
|
||||
|
||||
Not allowed:
|
||||
|
||||
- IPC or HTTP handler registration
|
||||
- renderer or preload dependencies
|
||||
- pure domain policy that belongs in `core/domain`
|
||||
|
||||
### `main/adapters/output/`
|
||||
|
||||
Driven adapters that implement application ports.
|
||||
|
|
@ -185,12 +230,16 @@ Responsibilities:
|
|||
|
||||
Outside the feature, import only:
|
||||
|
||||
- `@features/<feature>` when the feature owns a deliberate root public barrel
|
||||
- `@features/<feature>/contracts`
|
||||
- `@features/<feature>/main`
|
||||
- `@features/<feature>/preload`
|
||||
- `@features/<feature>/renderer`
|
||||
|
||||
Do not deep-import feature internals from app shell or from other features.
|
||||
Layer entrypoints should be explicit `index.ts` files that export only supported
|
||||
surface area. Focused tests may import internals when they are testing that unit
|
||||
directly, but production integration code should not.
|
||||
|
||||
### Core isolation
|
||||
|
||||
|
|
@ -207,8 +256,11 @@ Do not deep-import feature internals from app shell or from other features.
|
|||
|
||||
`core/application` must not import:
|
||||
|
||||
- `main/*`
|
||||
- `renderer/*`
|
||||
- `@features/<feature>/main/**`
|
||||
- `@features/<feature>/renderer/**`
|
||||
- `@main/*`
|
||||
- `@renderer/*`
|
||||
- `@preload/*`
|
||||
- Electron APIs
|
||||
- Fastify
|
||||
- child process modules
|
||||
|
|
@ -266,16 +318,35 @@ If the feature still owns meaningful pure semantics or projection rules, keep
|
|||
`core/` and skip only the process layers you do not need.
|
||||
|
||||
Example:
|
||||
|
||||
- `src/features/agent-graph` keeps `core/domain` and `renderer`, but does not add fake `main/` or `preload/` folders because the transport boundary lives elsewhere.
|
||||
|
||||
## Current Feature Shape Examples
|
||||
|
||||
Use these local examples before inventing a new variant:
|
||||
|
||||
- `src/features/recent-projects` - full cross-process reference with
|
||||
`contracts`, `core`, `main`, `preload`, and `renderer`.
|
||||
- `src/features/member-work-sync` - full cross-process feature with a root
|
||||
public barrel and broader main-process infrastructure.
|
||||
- `src/features/member-log-stream` - full cross-process feature that uses
|
||||
`main/application/` for main-only runtime orchestration.
|
||||
- `src/features/agent-graph` - thin renderer integration with `core/domain` and
|
||||
`renderer`, no fake process layers.
|
||||
- `src/features/codex-model-catalog` and `src/features/team-runtime-lanes` -
|
||||
process-limited features that omit renderer or preload layers when they do not
|
||||
own that boundary.
|
||||
|
||||
## Definition Of Done For A Reference Feature
|
||||
|
||||
A feature is reference-quality when:
|
||||
|
||||
- structure matches the canonical template
|
||||
- structure matches the full or thin template chosen for the feature
|
||||
- core is side-effect free
|
||||
- app shell imports only public entrypoints
|
||||
- renderer UI is dumb and presentational
|
||||
- at least the main domain and application rules are tested
|
||||
- at least the main domain and application rules are tested when those layers
|
||||
exist
|
||||
- architecture is enforced by lint rules
|
||||
- feature has a concise standard or plan doc if it introduces a new pattern
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Agent Graph, per-team tool approval, interactive AskUserQuestion, task comment n
|
|||
|
||||
Minor release: React 19 + Electron 40 migration, start-task-by-user, auth troubleshooting guide, syntax highlighting for R/Ruby/PHP/SQL, search performance improvements, cost tracking accuracy, WSL/Windows path fixes. Full list: [CHANGELOG.md](./CHANGELOG.md).
|
||||
|
||||
## Published: v1.0.0 (2026-03-19)
|
||||
## Published: v1.0.0 (2026-03-23)
|
||||
|
||||
Initial release: Agent Teams with reliable CLI detection in packaged builds (shell PATH/HOME, `CLAUDE_CONFIG_DIR`, auth output parsing), IPC status cache handling, concurrent binary resolution, capped NDJSON diagnostics. Full list: [CHANGELOG.md](./CHANGELOG.md).
|
||||
|
||||
|
|
@ -37,23 +37,23 @@ First stable build: CLI/auth reliability in packaged apps, IPC hardening, and pl
|
|||
<table>
|
||||
<tr>
|
||||
<td align="center">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Claude.Agent.Teams.UI-1.0.0-arm64.dmg">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Agent.Teams.AI-1.0.0-arm64.dmg">
|
||||
<img src="https://img.shields.io/badge/macOS_Apple_Silicon-.dmg-000000?style=for-the-badge&logo=apple&logoColor=white" alt="macOS Apple Silicon" />
|
||||
</a>
|
||||
<br />
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Claude.Agent.Teams.UI-1.0.0.dmg">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Agent.Teams.AI-1.0.0.dmg">
|
||||
<img src="https://img.shields.io/badge/macOS_Intel-.dmg-434343?style=for-the-badge&logo=apple&logoColor=white" alt="macOS Intel" />
|
||||
</a>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Claude.Agent.Teams.UI.Setup.1.0.0.exe">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Agent.Teams.AI.Setup.1.0.0.exe">
|
||||
<img src="https://img.shields.io/badge/Windows-Download_.exe-0078D4?style=for-the-badge&logo=windows&logoColor=white" alt="Windows" />
|
||||
</a>
|
||||
<br />
|
||||
<sub>May trigger SmartScreen — click "More info" → "Run anyway"</sub>
|
||||
</td>
|
||||
<td align="center">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Claude.Agent.Teams.UI-1.0.0.AppImage">
|
||||
<a href="https://github.com/777genius/agent-teams-ai/releases/download/v1.0.0/Agent.Teams.AI-1.0.0.AppImage">
|
||||
<img src="https://img.shields.io/badge/Linux-Download_.AppImage-FCC624?style=for-the-badge&logo=linux&logoColor=black" alt="Linux AppImage" />
|
||||
</a>
|
||||
<br />
|
||||
|
|
|
|||
|
|
@ -384,38 +384,29 @@ Each row may show:
|
|||
## Launch Flow Changes
|
||||
|
||||
Current launch flow already supports a team-level `model`.
|
||||
Current UI also already has a provider affordance in [TeamModelSelector.tsx](../../src/renderer/components/team/dialogs/TeamModelSelector.tsx), but its logic is still placeholder/coming-soon. That placeholder currently uses `openai`; it should be normalized or mapped to the app-level provider id `codex` during implementation.
|
||||
Current UI already has a provider affordance in [TeamModelSelector.tsx](../src/renderer/components/team/dialogs/TeamModelSelector.tsx). The remaining work is to keep provider/model normalization consistent across all launch surfaces.
|
||||
|
||||
Current code paths that must be kept in sync:
|
||||
|
||||
- shared types in [team.ts](../../src/shared/types/team.ts)
|
||||
- HTTP launch parsing in [teams.ts](../../src/main/http/teams.ts)
|
||||
- IPC launch/create validation in [teams.ts](../../src/main/ipc/teams.ts)
|
||||
- persisted draft metadata in [TeamMetaStore.ts](../../src/main/services/team/TeamMetaStore.ts)
|
||||
- scheduled one-shot config in [schedule.ts](../../src/shared/types/schedule.ts)
|
||||
- scheduled execution in [ScheduledTaskExecutor.ts](../../src/main/services/schedule/ScheduledTaskExecutor.ts)
|
||||
- provider/model UI helpers in [TeamModelSelector.tsx](../../src/renderer/components/team/dialogs/TeamModelSelector.tsx)
|
||||
- model display parsing in [modelParser.ts](../../src/shared/utils/modelParser.ts)
|
||||
- launch dialog state persistence in [LaunchTeamDialog.tsx](../../src/renderer/components/team/dialogs/LaunchTeamDialog.tsx)
|
||||
- create dialog state persistence in [CreateTeamDialog.tsx](../../src/renderer/components/team/dialogs/CreateTeamDialog.tsx)
|
||||
- saved draft restore in [teams.ts](../../src/main/ipc/teams.ts)
|
||||
- shared types in [team.ts](../src/shared/types/team.ts)
|
||||
- HTTP launch parsing in [teams.ts](../src/main/http/teams.ts)
|
||||
- IPC launch/create validation in [teams.ts](../src/main/ipc/teams.ts)
|
||||
- persisted draft metadata in [TeamMetaStore.ts](../src/main/services/team/TeamMetaStore.ts)
|
||||
- scheduled one-shot config in [schedule.ts](../src/shared/types/schedule.ts)
|
||||
- scheduled execution in [ScheduledTaskExecutor.ts](../src/main/services/schedule/ScheduledTaskExecutor.ts)
|
||||
- provider/model UI helpers in [TeamModelSelector.tsx](../src/renderer/components/team/dialogs/TeamModelSelector.tsx)
|
||||
- model display parsing in [modelParser.ts](../src/shared/utils/modelParser.ts)
|
||||
- launch dialog state persistence in [LaunchTeamDialog.tsx](../src/renderer/components/team/dialogs/LaunchTeamDialog.tsx)
|
||||
- create dialog state persistence in [CreateTeamDialog.tsx](../src/renderer/components/team/dialogs/CreateTeamDialog.tsx)
|
||||
- saved draft restore in [teams.ts](../src/main/ipc/teams.ts)
|
||||
- launch param persistence in the renderer store
|
||||
- slash-command metadata in [slashCommands.ts](../../src/shared/utils/slashCommands.ts)
|
||||
- slash-command metadata in [slashCommands.ts](../src/shared/utils/slashCommands.ts)
|
||||
|
||||
Next step is to extend launch requests to include provider selection:
|
||||
Launch requests already carry provider selection. The remaining work is to keep request parsing, persistence, and runtime selection consistent. Future-compatible provider options can look like this:
|
||||
|
||||
```ts
|
||||
interface TeamLaunchRequest {
|
||||
providerId?: 'anthropic' | 'codex';
|
||||
model?: string;
|
||||
}
|
||||
```
|
||||
|
||||
Future-compatible extension for providers with internal backend preference:
|
||||
|
||||
```ts
|
||||
interface TeamLaunchRequest {
|
||||
providerId?: 'anthropic' | 'codex' | 'gemini';
|
||||
providerId?: TeamProviderId;
|
||||
model?: string;
|
||||
providerOptions?: {
|
||||
geminiBackendPreference?: 'auto' | 'api' | 'cli';
|
||||
|
|
@ -444,9 +435,9 @@ Future-compatible shape:
|
|||
|
||||
```ts
|
||||
interface TeamLaunchRequest {
|
||||
providerId?: 'anthropic' | 'codex';
|
||||
providerId?: TeamProviderId;
|
||||
model?: string;
|
||||
memberProviders?: Record<string, 'anthropic' | 'codex'>;
|
||||
memberProviders?: Record<string, TeamProviderId>;
|
||||
memberModels?: Record<string, string>;
|
||||
}
|
||||
```
|
||||
|
|
@ -793,7 +784,7 @@ This phase must explicitly define the child-process env mapping for provider sel
|
|||
It must also persist launch-time `providerId` alongside `model` in team/run metadata so existing runs remain inspectable after refresh.
|
||||
It must update both the interactive team runtime path and the scheduler one-shot path.
|
||||
|
||||
Phase 4 should also explicitly hide or keep disabled unsupported placeholder providers in `TeamModelSelector` until their runtime support actually exists. In Phase 1/2/3, only `Anthropic` and `Codex` should move out of placeholder behavior.
|
||||
Phase 4 should also explicitly hide or keep disabled unsupported providers in `TeamModelSelector` until their runtime support actually exists. In Phase 1/2/3, only `Anthropic` and `Codex` should move out of disabled state.
|
||||
|
||||
### Phase 5. Future teammate-level routing
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@
|
|||
|
||||
⚠️ `docs/iterations/*` - это исторические planning notes. Они полезны для контекста, но не являются source-of-truth для текущего поведения продукта. Актуальный контракт review flow описан в этом файле и в [kanban-design.md](./kanban-design.md).
|
||||
|
||||
⚠️ `agent-attachments-*.md` (architecture plan + phase 1-5 plans) - это исторические дизайн-документы для feature attachments. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры. Для актуального состояния см. код в `src/features/agent-attachments/core/domain/` и тесты.
|
||||
|
||||
### 1. Messaging: Inbox-файлы
|
||||
|
||||
Единственный способ общаться с **запущенными** тиммейтами. SDK и CLI создают новые сессии, а не подключаются к существующим. Подробности: [research-messaging.md](./research-messaging.md)
|
||||
|
|
@ -106,7 +108,7 @@ Kanban-позиция (REVIEW, APPROVED) хранится в `kanban-state.json`
|
|||
|
||||
## Открытые вопросы
|
||||
|
||||
- **FileWatcher расширение**: FileWatcher.ts уже 900+ строк — добавление teams/tasks watchers нетривиально, требует отдельного спайка
|
||||
- **FileWatcher расширение**: FileWatcher.ts уже 1243 строк — добавление teams/tasks watchers нетривиально, требует отдельного спайка
|
||||
- **Windows atomic rename**: `fs.renameSync` на Windows бросает `EXDEV`/`EBUSY` при кросс-устройственном rename — нужна обёртка
|
||||
- **leadSessionId интеграция**: config.json содержит `leadSessionId`, но интеграция с session viewer (переход к сессии лида) — открытый вопрос
|
||||
- **Hard Interrupt**: сообщения доставляются между turns (1-30с задержка). В будущем нужен способ прервать mid-turn
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
# Agent attachments architecture plan
|
||||
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию и план реализации. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры. Для актуального состояния см. код в `src/features/agent-attachments/core/domain/` (budgets.ts, errors.ts, capabilities.ts, types.ts и т.д.).
|
||||
|
||||
## Summary
|
||||
|
||||
Goal: support screenshots/images and later documents across Claude, Codex, and OpenCode teammates without treating base64 as a universal transport and without destabilizing team launch/runtime delivery.
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
# Phase 1 - Attachment normalization, image optimization, budgets, and UI warnings
|
||||
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию для Phase 1. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры. Для актуального состояния см. код в `src/features/agent-attachments/core/domain/` (budgets.ts, errors.ts, capabilities.ts, types.ts и т.д.).
|
||||
|
||||
## Summary
|
||||
|
||||
Goal: make attachment intake safe before changing provider delivery paths.
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# Phase 2 - Claude stream-json attachment delivery adapter
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# Phase 3 - Codex native image attachment delivery
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# Phase 4 - OpenCode file parts and model vision capability gate
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# Phase 5 - Cross-runtime attachment E2E, diagnostics, docs, and polish
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
|
||||
|
||||
## Summary
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
# Agent attachments
|
||||
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
|
||||
|
||||
This document describes the v1 attachment path for Agent Teams.
|
||||
|
||||
|
|
|
|||
|
|
@ -180,25 +180,11 @@ body {
|
|||
z-index: 2;
|
||||
max-width: 780px !important;
|
||||
padding: 30px 32px 32px;
|
||||
border: 1px solid color-mix(in srgb, var(--vp-c-border) 72%, transparent);
|
||||
border-radius: 28px;
|
||||
background:
|
||||
linear-gradient(180deg, color-mix(in srgb, var(--vp-c-bg-elv) 74%, transparent), color-mix(in srgb, var(--vp-c-bg-soft) 56%, transparent)),
|
||||
color-mix(in srgb, var(--vp-c-bg-elv) 70%, transparent);
|
||||
box-shadow: var(--at-shadow-cyan-lg);
|
||||
backdrop-filter: blur(var(--at-blur-lg));
|
||||
text-shadow: 0 2px 22px color-mix(in srgb, var(--vp-c-bg) 82%, transparent);
|
||||
}
|
||||
|
||||
.VPHero.has-image .main::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
border-radius: inherit;
|
||||
pointer-events: none;
|
||||
background:
|
||||
radial-gradient(circle at 20% 0%, rgba(0, 240, 255, 0.14), transparent 42%),
|
||||
radial-gradient(circle at 82% 12%, rgba(255, 0, 255, 0.08), transparent 30%);
|
||||
opacity: 0.9;
|
||||
display: none;
|
||||
}
|
||||
|
||||
.VPHero.has-image .main > * {
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ features:
|
|||
linkText: Create a team
|
||||
- icon: "02"
|
||||
title: Live kanban board
|
||||
details: Watch tasks move through todo, progress, review, blocked, and done as agents work.
|
||||
details: Watch tasks move through todo, in progress, review, done, and approved as agents work.
|
||||
link: /guide/agent-workflow
|
||||
linkText: Understand workflow
|
||||
- icon: "03"
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ features:
|
|||
linkText: Создать команду
|
||||
- icon: "02"
|
||||
title: Живая канбан-доска
|
||||
details: Видно, как задачи проходят todo, progress, review, blocked и done во время работы агентов.
|
||||
details: Видно, как задачи проходят todo, in progress, review, done и approved во время работы агентов.
|
||||
link: /ru/guide/agent-workflow
|
||||
linkText: Разобрать workflow
|
||||
- icon: "03"
|
||||
|
|
|
|||
31
src/features/CLAUDE.md
Normal file
31
src/features/CLAUDE.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
# Feature-Local Guidance
|
||||
|
||||
This file is a navigation layer for feature slices under `src/features/`.
|
||||
|
||||
Before changing a feature slice, read:
|
||||
|
||||
- [Project instructions](../../CLAUDE.md)
|
||||
- [Feature Architecture Standard](../../docs/FEATURE_ARCHITECTURE_STANDARD.md)
|
||||
- [Feature root guide](./README.md)
|
||||
|
||||
Use local references:
|
||||
|
||||
- `src/features/recent-projects` - full cross-process reference
|
||||
- `src/features/member-work-sync` - full feature with a root public barrel
|
||||
- `src/features/member-log-stream` - full feature with `main/application/`
|
||||
- `src/features/agent-graph` - thin `core/domain` plus `renderer` reference
|
||||
|
||||
Default location for new feature work:
|
||||
|
||||
- `src/features/<feature-name>/`
|
||||
|
||||
Before adding or moving code:
|
||||
|
||||
- decide whether the feature is full, thin, or process-limited
|
||||
- add only the layers the feature actually owns
|
||||
- expose production callers through public entrypoints only
|
||||
- keep tests close to the layer they verify under `test/features/<feature>/` or
|
||||
feature-local `__tests__` when that is the established local pattern
|
||||
|
||||
Do not duplicate architecture rules here. Keep architecture rules centralized in
|
||||
[../../docs/FEATURE_ARCHITECTURE_STANDARD.md](../../docs/FEATURE_ARCHITECTURE_STANDARD.md).
|
||||
|
|
@ -1,18 +1,20 @@
|
|||
/**
|
||||
* MoreMenu - Dropdown menu behind a "..." icon for less-frequent toolbar actions.
|
||||
*
|
||||
* Groups: Teams, Settings, Extensions, Search, Schedules, Export (session-only), Analyze (session-only).
|
||||
* Groups: Teams, Settings, Extensions, Search, Schedules, Docs, Export (session-only), Analyze (session-only).
|
||||
* Closes on outside click or Escape.
|
||||
*/
|
||||
|
||||
import React, { useCallback, useEffect, useRef, useState } from 'react';
|
||||
|
||||
import { isElectronMode } from '@renderer/api';
|
||||
import { Tooltip, TooltipContent, TooltipTrigger } from '@renderer/components/ui/tooltip';
|
||||
import { useStore } from '@renderer/store';
|
||||
import { triggerDownload } from '@renderer/utils/sessionExporter';
|
||||
import { formatShortcut } from '@renderer/utils/stringUtils';
|
||||
import {
|
||||
Activity,
|
||||
BookOpen,
|
||||
Braces,
|
||||
Calendar,
|
||||
FileText,
|
||||
|
|
@ -29,6 +31,8 @@ import type { SessionDetail } from '@renderer/types/data';
|
|||
import type { Tab } from '@renderer/types/tabs';
|
||||
import type { ExportFormat } from '@renderer/utils/sessionExporter';
|
||||
|
||||
const DOCS_URL = 'https://777genius.github.io/agent-teams-ai/docs/';
|
||||
|
||||
interface MoreMenuProps {
|
||||
activeTab: Tab | undefined;
|
||||
activeTabSessionDetail: SessionDetail | null;
|
||||
|
|
@ -109,6 +113,15 @@ export const MoreMenu = ({
|
|||
[activeTabSessionDetail]
|
||||
);
|
||||
|
||||
const handleOpenDocs = useCallback(async () => {
|
||||
if (isElectronMode()) {
|
||||
await window.electronAPI.openExternal(DOCS_URL);
|
||||
} else {
|
||||
window.open(DOCS_URL, '_blank', 'noopener,noreferrer');
|
||||
}
|
||||
setIsOpen(false);
|
||||
}, []);
|
||||
|
||||
const isSessionWithData = activeTab?.type === 'session' && activeTabSessionDetail != null;
|
||||
|
||||
// Build menu sections
|
||||
|
|
@ -159,6 +172,14 @@ export const MoreMenu = ({
|
|||
setIsOpen(false);
|
||||
},
|
||||
},
|
||||
{
|
||||
id: 'docs',
|
||||
label: 'Docs',
|
||||
icon: BookOpen,
|
||||
onClick: () => {
|
||||
void handleOpenDocs();
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
const sessionItems: MenuItem[] = isSessionWithData
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ export const TabBarActions = (): React.JSX.Element => {
|
|||
<TooltipContent side="bottom">Discord</TooltipContent>
|
||||
</Tooltip>
|
||||
|
||||
{/* More menu (Teams, Settings, Extensions, Search, Export, Analyze, Schedules) */}
|
||||
{/* More menu (Teams, Settings, Extensions, Search, Schedules, Docs, Export, Analyze) */}
|
||||
<MoreMenu
|
||||
activeTab={activeTab}
|
||||
activeTabSessionDetail={activeTabSessionDetail}
|
||||
|
|
|
|||
|
|
@ -3,17 +3,21 @@
|
|||
This directory contains older renderer-local slices and integrations.
|
||||
|
||||
For new medium and large features, use the canonical standard instead:
|
||||
- [Feature Architecture Standard](../../docs/FEATURE_ARCHITECTURE_STANDARD.md)
|
||||
- [Canonical feature root](../README.md)
|
||||
- [Feature-local guidance](../CLAUDE.md)
|
||||
|
||||
- [Feature Architecture Standard](../../../docs/FEATURE_ARCHITECTURE_STANDARD.md)
|
||||
- [Canonical feature root](../../features/README.md)
|
||||
- [Feature-local guidance](../../features/CLAUDE.md)
|
||||
|
||||
Default location for new feature work:
|
||||
|
||||
- `src/features/<feature-name>/`
|
||||
|
||||
Reference implementation:
|
||||
|
||||
- `src/features/recent-projects`
|
||||
|
||||
Keep `src/renderer/features/*` for:
|
||||
|
||||
- existing legacy slices
|
||||
- renderer-only thin integrations
|
||||
- work that does not introduce a new use case, transport boundary, or cross-process architecture
|
||||
|
|
|
|||
Loading…
Reference in a new issue