docs: update agent teams docs and navigation

This commit is contained in:
777genius 2026-05-11 11:09:17 +03:00
parent 3ead3207e6
commit eb83ac92b2
21 changed files with 255 additions and 61 deletions

View 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.

View file

@ -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

View file

@ -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.

View file

@ -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

View file

@ -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 />

View file

@ -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

View file

@ -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

View file

@ -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.

View file

@ -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.

View file

@ -1,4 +1,5 @@
# Phase 2 - Claude stream-json attachment delivery adapter
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
## Summary

View file

@ -1,4 +1,5 @@
# Phase 3 - Codex native image attachment delivery
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
## Summary

View file

@ -1,4 +1,5 @@
# Phase 4 - OpenCode file parts and model vision capability gate
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
## Summary

View file

@ -1,4 +1,5 @@
# Phase 5 - Cross-runtime attachment E2E, diagnostics, docs, and polish
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
## Summary

View file

@ -1,4 +1,5 @@
# Agent attachments
⚠️ **Историческая документация**: Этот файл содержит дизайн-документацию. Фактическая реализация в `src/features/agent-attachments/` может отличаться от описанной архитектуры.
This document describes the v1 attachment path for Agent Teams.

View file

@ -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 > * {

View file

@ -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"

View file

@ -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
View 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).

View file

@ -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

View file

@ -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}

View file

@ -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