Refactor team collaboration skills and update documentation

- Renamed `team-lifecycle-v5` to `team-lifecycle` across various documentation files for consistency.
- Updated references in code examples and usage sections to reflect the new skill name.
- Added a new command file for the `monitor` functionality in the `team-iterdev` skill, detailing the coordinator's monitoring events and task management.
- Introduced new components for dynamic pipeline visualization and session coordinates display in the frontend.
- Implemented utility functions for pipeline stage detection and status derivation based on message history.
- Enhanced the team role panel to map members to their respective pipeline roles with status indicators.
- Updated Chinese documentation to reflect the changes in skill names and descriptions.
This commit is contained in:
catlog22
2026-03-04 11:07:48 +08:00
parent 5e96722c09
commit ffd5282932
132 changed files with 2938 additions and 18916 deletions

View File

@@ -269,6 +269,10 @@ export async function handleTeamRoutes(ctx: RouteContext): Promise<boolean> {
updated_at: string;
archived_at?: string;
pipeline_mode?: string;
pipeline_stages?: string[];
role_state?: Record<string, Record<string, unknown>>;
roles?: string[];
team_name?: string;
memberCount: number;
members: string[];
isLegacy: boolean;
@@ -295,6 +299,10 @@ export async function handleTeamRoutes(ctx: RouteContext): Promise<boolean> {
updated_at: meta.updated_at,
archived_at: meta.archived_at,
pipeline_mode: meta.pipeline_mode,
pipeline_stages: meta.pipeline_stages,
role_state: meta.role_state,
roles: meta.roles,
team_name: meta.team_name,
memberCount: memberSet.size,
members: Array.from(memberSet),
isLegacy: false,
@@ -325,6 +333,10 @@ export async function handleTeamRoutes(ctx: RouteContext): Promise<boolean> {
updated_at: meta.updated_at,
archived_at: meta.archived_at,
pipeline_mode: meta.pipeline_mode,
pipeline_stages: meta.pipeline_stages,
role_state: meta.role_state,
roles: meta.roles,
team_name: meta.team_name,
memberCount: memberSet.size,
members: Array.from(memberSet),
isLegacy: true,
@@ -434,7 +446,7 @@ export async function handleTeamRoutes(ctx: RouteContext): Promise<boolean> {
if (!existsSync(sessionDir)) {
// Check if it's a legacy team with session_id in meta
const meta = getEffectiveTeamMeta(artifactsTeamName);
const legacySessionId = (meta as Record<string, unknown>).session_id as string | undefined;
const legacySessionId = (meta as unknown as Record<string, unknown>).session_id as string | undefined;
if (legacySessionId) {
// Legacy team with session_id - redirect to session directory
const legacySessionDir = getSessionDir(legacySessionId, root);

View File

@@ -117,9 +117,35 @@ async function serveStaticFile(
const ext = extname(filePath);
const mimeType = MIME_TYPES[ext] || 'application/octet-stream';
// Determine cache strategy based on file type
const fileName = filePath.split('/').pop() || '';
const isIndexHtml = filePath.endsWith('index.html');
const isAssetFile = fileName.startsWith('index-') && (ext === '.js' || ext === '.css');
// For index.html: use no-cache to prevent stale content issues
if (isIndexHtml) {
res.writeHead(200, {
'Content-Type': mimeType,
'Cache-Control': 'no-cache',
});
res.end(content);
return true;
}
// For assets (JS/CSS with hash in filenames), use long-term cache
if (isAssetFile) {
res.writeHead(200, {
'Content-Type': mimeType,
'Cache-Control': 'public, max-age=31536000, immutable',
});
res.end(content);
return true;
}
// For other files (fallback to index.html for SPA), use no-cache
res.writeHead(200, {
'Content-Type': mimeType,
'Cache-Control': 'public, max-age=31536000',
'Cache-Control': 'no-cache',
});
res.end(content);
return true;